「Login failed for user 'sa'」是 SQL Server 最經典的連線錯誤,成因多樣:驗證模式不符、SA 帳號停用、密碼策略衝突、網路協定未啟用、甚至登錄表設定遺漏。本文彙整三大典型場景與對應解決方案。
錯誤訊息:Reason: Not associated with a trusted SQL Server connection
原因:伺服器安裝時選擇了 Windows Authentication Only,拒絕 SQL Server 登入帳號。
解決步驟(需以 Windows 管理員身分登入):
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'LoginMode', REG_DWORD, 2; -- 2 = 混合模式
-- 之後重啟 SQL Server 服務
現象:剛安裝完 2008 Express,混合模式已啟用,但 SA 仍無法登入。
根因:Express 版預設停用 SA 帳號,且登錄表 LoginMode 可能仍為 1。
解決:
ALTER LOGIN sa ENABLE;
ALTER LOGIN sa WITH PASSWORD = 'StrongP@ssw0rd';
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer\LoginMode
值設為 2
觸發條件:
CHECK_POLICY = ON)。錯誤日誌特徵:
Error: 18456, Severity: 14, State: 10.
解決方案**:
CREATE LOGIN app_user WITH PASSWORD = '...', CHECK_POLICY = OFF;
ALTER LOGIN app_user WITH CHECK_POLICY = OFF;
微軟曾釋出熱修補程式(需 SP1),但根治仍在於帳號狀態與策略一致性。
| 檢查項目 | 指令/位置 | 預期值 |
|---|---|---|
| 驗證模式 | SSMS 屬性/登錄表 LoginMode | 2 (混合模式) |
| SA 帳號狀態 | sys.server_principals.is_disabled | 0 (啟用) |
| SA 密碼 | ALTER LOGIN sa WITH PASSWORD | 符合複雜度或關閉 CHECK_POLICY |
| TCP/IP 協定 | SQL Server Configuration Manager | 已啟用,埠 1433 |
| 防火牆 | Windows 防火牆/雲端安全群組 | 開放 1433 入站 |
| 服務帳號狀態 | AD 使用者與電腦 | 未鎖定、未過期、密碼正確 |
啟用登入稽核(屬性 → 安全性 → 登入稽核:失敗的登入),查看 ERRORLOG 記錄的 State 碼: