首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET aspnet_regsql.exe 工具註冊資料庫圖文教學:建立 Membership/Role 所需結構

     編輯:ASP.NET 基礎

前言

ASP.NET 2.0+ 內建的 **Membership (會員)、Role (角色)、Profile (個人資料)、Web Parts 個人化** 等功能,需要資料庫預先建立特定結構 (資料表、預存程序、檢視)。`aspnet_regsql.exe` 是官方提供的命令列/精靈工具,用於建立或移除這些結構。本文提供完整圖文操作步驟、常見錯誤排查、與現代化替代方案。

工具位置

.NET Framework 2.0/3.5: C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe
.NET Framework 4.x:   C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe
.NET Core / .NET 5+:  不使用此工具,改用 EF Core Migration / SQL Scripts

圖文操作步驟 (GUI 精靈模式)

步驟 1:開啟命令提示字元 (管理員權限)

輸入路徑切換至工具目錄,或直接輸入完整路徑執行:

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
aspnet_regsql.exe

將彈出 **ASP.NET SQL Server 安裝精靈** 視窗。

步驟 2:歡迎頁面 → 下一步

步驟 3:選擇伺服器與資料庫

  • 伺服器:`(local)` 或 `.\SQLEXPRESS` 或遠端 IP/主機名。
  • 驗證方式:
    • Windows 驗證:目前登入 Windows 帳號需具備 SQL `sysadmin` 或 `dbcreator` 權限。
    • SQL Server 驗證:輸入 `sa` 或具備權限的 SQL 登入帳號。
  • 資料庫:
    • **現有資料庫**:下拉選單選擇 (需先在 SSMS 建立空資料庫)。
    • **新增資料庫**:輸入名稱,精靈會自動建立。

選擇伺服器資料庫

步驟 4:確認設定 → 下一步

精靈顯示將執行的動作:建立/移除應用程式服務資料庫物件。

步驟 5:執行完成

進度條跑完顯示「完成」。此時資料庫會新增 **11 張資料表** (以 `aspnet_` 開頭)、**預存程序**、**檢視**。

資料庫物件清單

核心資料表對照

資料表用途
aspnet_Applications應用程式定義 (ApplicationName)
aspnet_Users使用者基本資料
aspnet_Membership密碼、Email、鎖定狀態等
aspnet_Roles角色定義
aspnet_UsersInRoles使用者-角色對應
aspnet_Profile使用者自訂屬性
aspnet_SchemaVersions結構版本控制
aspnet_PersonalizationAllUsers / PerUserWeb Parts 個人化資料
aspnet_Paths路徑對應 (個人化用)

命令列模式 (適合自動化部署腳本)

REM 建立所有功能結構 (預設)
aspnet_regsql.exe -S .\SQLEXPRESS -E -A all -d MyAppDb

REM 僅建立 Membership/Role
aspnet_regsql.exe -S .\SQLEXPRESS -E -A mr -d MyAppDb

REM 移除結構
aspnet_regsql.exe -S .\SQLEXPRESS -E -R all -d MyAppDb

REM 參數說明
-S  伺服器名稱
-E  Windows 驗證 (或 -U user -P pwd)
-d  資料庫名稱
-A  功能選項: all / m(Membership) / r(Role) / p(Profile) / c(Personalization) / w(WebParts)
-R  移除模式
-sqlexportonly  僅輸出 SQL 腳本不執行 (供 DBA 審核)
aspnet_regsql.exe -S . -E -A all -d MyAppDb -sqlexportonly > Install.sql

驗證註冊是否成功

  1. 開啟 Visual Studio 專案 → 方案總管 → **ASP.NET 組態** 圖示 (或專案右鍵 → ASP.NET 組態)。
  2. 切換到 **安全性** 索引標籤 → **選取驗證類型** → 選擇 **從網際網路** → **完成**。
  3. 點選 **測試** 連結,若顯示「資料庫連接成功」即代表設定正確。
  4. 測試連線成功

常見錯誤與解決方案

錯誤現象原因解決方法
「無法查詢資料庫清單」
「登入失敗,使用者 'xxx' 登入失敗」
SQL 登入帳號預設資料庫設錯、或無 `VIEW ANY DATABASE` 權限1. SSMS → 安全性 → 登入 → 屬性 → 預設資料庫設為 `master`
2. 或授予 `VIEW ANY DATABASE` 權限
3. **直接在下拉框手輸資料庫名稱** 繞過查詢 (常見有效繞過法)
「物件名稱 'sysdatabases' 無效」舊版工具相容性問題、或權限不足查詢系統檢視同上:手動輸入資料庫名稱;或升級工具版本 (v4.0 目錄)
「建立資料庫失敗,CREATE DATABASE 權限被拒」帳號無 `dbcreator` 伺服器角色使用 `sa` 或具 `sysadmin`/`dbcreator` 的帳號執行
ASP.NET 組態測試失敗連線字串指向錯誤資料庫、或 `LocalSqlServer` 未覆寫1. web.config 確認 `` 指向正確 DB
2. IIS → 網站 → 連線字串 → 編輯 `LocalSqlServer` 指向該 DB
部署至 IIS 後無法運作應用程式池身分 (ApplicationPoolIdentity) 無資料庫權限1. 連線字串使用 SQL 驗證 (User ID/Password)
2. 或授予 IIS APPPOOL\AppPoolName 資料庫權限

關鍵後續設定:web.config 連線字串

<connectionStrings>
  <!-- 覆寫機器預設 LocalSqlServer -->
  <remove name="LocalSqlServer" />
  <add name="LocalSqlServer" 
       connectionString="Server=.;Database=MyAppDb;User Id=app_user;Password=*****;" 
       providerName="System.Data.SqlClient" />
  
  <!-- 應用程式自用連線字串 -->
  <add name="MyAppConn" 
       connectionString="Server=.;Database=MyAppDb;User Id=app_user;Password=*****;" 
       providerName="System.Data.SqlClient" />
</connectionStrings>

<system.web>
  <membership defaultProvider="SqlProvider">
    <providers>
      <clear />
      <add name="SqlProvider" 
           type="System.Web.Security.SqlMembershipProvider" 
           connectionStringName="LocalSqlServer" 
           applicationName="MyApp" 
           enablePasswordRetrieval="false" 
           enablePasswordReset="true" 
           requiresQuestionAndAnswer="false" 
           requiresUniqueEmail="true" 
           maxInvalidPasswordAttempts="5" 
           minRequiredPasswordLength="6" 
           minRequiredNonalphanumericCharacters="0" 
           passwordAttemptWindow="10" 
           passwordFormat="Hashed" />
    </providers>
  </membership>
  
  <roleManager enabled="true" defaultProvider="SqlRoleProvider">
    <providers>
      <clear />
      <add name="SqlRoleProvider" 
           type="System.Web.Security.SqlRoleProvider" 
           connectionStringName="LocalSqlServer" 
           applicationName="MyApp" />
    </providers>
  </roleManager>
</system.web>

現代化替代方案 (.NET Core / .NET 5+)

ASP.NET Core **不使用** `aspnet_regsql.exe`,改用 **ASP.NET Core Identity** + **Entity Framework Core Migrations**:

// 1. 安裝套件
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

// 2. 定義 DbContext 繼承 IdentityDbContext
public class AppDbContext : IdentityDbContext
{
    public AppDbContext(DbContextOptions options) : base(options) {}
}

// 3. 註冊服務 (Program.cs)
builder.Services.AddDbContext(options => 
    options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
builder.Services.AddDefaultIdentity()
    .AddEntityFrameworkStores();

// 4. 建立 Migration 並更新資料庫
dotnet ef migrations add InitialIdentity
dotnet ef database update

優點:程式碼優先、版本控管、跨平台、支援自訂用戶實體、整合 DI、無需外部工具。

總結

`aspnet_regsql.exe` 是 ASP.NET Web Forms / MVC 5 時代建立 Membership/Role 資料庫結構的標準工具。掌握 **GUI 精靈**、**命令列自動化**、**常見權限錯誤排查**、**web.config 連線字串覆寫** 四大關鍵,即可順利完成部署。新專案請直接採用 **ASP.NET Core Identity + EF Core**,享受現代化開發體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved