ASP/ASP.NET 應用程式使用 NT AUTHORITY\IUSR (IIS 匿名存取身分) 連線 SQL Server 2008 時常遇到「登入失敗」。本文從連接字串、SSMS 建立登入/使用者對應、密碼原則鎖定 (MUST_CHANGE/CHECK_POLICY) 三個層面系統排查並給出解決方案。
SQL Server 2000/2005/2008 連接字串通用,常見兩種 Provider:
' SQLOLEDB (OLE DB)
ConnStr = "Provider=SQLOLEDB;Data Source=(local);UID=用戶;PWD=密碼;Database=資料庫"
' SQL Server ODBC
ConnStr = "Driver={SQL Server};Server=(local);UID=用戶;PWD=密碼;Database=資料庫"
Data Source 可用 (local)、127.0.0.1、.、實際電腦名或 IP,Port。NT AUTHORITY\IUSR (若為 Windows 驗證) 或建立 SQL 登入 (如 WebUser)。


現象:建立 SQL 登入時勾選「強制執行密碼原則」與「使用者必須在下次登入時變更密碼」(MUST_CHANGE=ON)。後續想取消原則勾選,報錯:
當 MUST_CHANGE 為 ON 時,不能將 CHECK_POLICY 和 CHECK_EXPIRATION 選項設為 OFF。
MUST_CHANGE = ON 強制要求下次登入變更密碼,此狀態下 CHECK_POLICY 與 CHECK_EXPIRATION 必須保持啟用,否則無法驗證新密碼合規性。
sa 開啟新查詢。ALTER LOGIN [登入名] WITH PASSWORD = N'新強密碼';
MUST_CHANGE 自動變為 OFF,即可在屬性視窗自由取消勾選原則選項。注意:刪除登入會同步移除對應的資料庫使用者與權限,請確認影響範圍。
SQL Server 不支援互動式「登入時強制變更密碼」提示。MUST_CHANGE=ON 時,用戶端嘗試登入會直接收到錯誤 18488 並中斷連線,無法進入變更密碼流程。
| 檢查項目 | 正確設定 |
|---|---|
| 連接字串 Provider | SQLOLEDB 或 SQL Server ODBC |
| Data Source | (local) / 127.0.0.1 / 電腦名 / IP,Port |
| SQL 登入是否存在 | SSMS 安全性 → 登入名 中已建立 |
| 資料庫使用者對應 | 目標資料庫已勾選,角色給予最小權限 (db_datareader 等) |
| 密碼原則鎖定 | 若遇 15128,用 ALTER LOGIN 重設密碼解除 MUST_CHANGE |
| 防火牆/TCP 1433 | 遠端連線需開啟防火牆規則 |
| SQL Browser 服務 | 命名執行個體需啟用 |
依序驗證上述項目,即可解決 NT AUTHORITY\IUSR 或一般 SQL 登入的連線失敗與密碼原則鎖定問題。