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
輸入路徑切換至工具目錄,或直接輸入完整路徑執行:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
aspnet_regsql.exe
將彈出 **ASP.NET SQL Server 安裝精靈** 視窗。

精靈顯示將執行的動作:建立/移除應用程式服務資料庫物件。
進度條跑完顯示「完成」。此時資料庫會新增 **11 張資料表** (以 `aspnet_` 開頭)、**預存程序**、**檢視**。

| 資料表 | 用途 |
|---|---|
| aspnet_Applications | 應用程式定義 (ApplicationName) |
| aspnet_Users | 使用者基本資料 |
| aspnet_Membership | 密碼、Email、鎖定狀態等 |
| aspnet_Roles | 角色定義 |
| aspnet_UsersInRoles | 使用者-角色對應 |
| aspnet_Profile | 使用者自訂屬性 |
| aspnet_SchemaVersions | 結構版本控制 |
| aspnet_PersonalizationAllUsers / PerUser | Web 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

| 錯誤現象 | 原因 | 解決方法 |
|---|---|---|
| 「無法查詢資料庫清單」 「登入失敗,使用者 '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 確認 ` 2. IIS → 網站 → 連線字串 → 編輯 `LocalSqlServer` 指向該 DB |
| 部署至 IIS 後無法運作 | 應用程式池身分 (ApplicationPoolIdentity) 無資料庫權限 | 1. 連線字串使用 SQL 驗證 (User ID/Password) 2. 或授予 IIS APPPOOL\AppPoolName 資料庫權限 |
<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>
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**,享受現代化開發體驗。