首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server「Login failed for user 'sa'」錯誤完整排查手冊

     編輯:MySQL 資料庫相關知識

「Login failed for user 'sa'」是 SQL Server 最經典的連線錯誤,成因多樣:驗證模式不符、SA 帳號停用、密碼策略衝突、網路協定未啟用、甚至登錄表設定遺漏。本文彙整三大典型場景與對應解決方案。

場景一:驗證模式為「僅 Windows 驗證」

錯誤訊息:Reason: Not associated with a trusted SQL Server connection

原因:伺服器安裝時選擇了 Windows Authentication Only,拒絕 SQL Server 登入帳號。

解決步驟(需以 Windows 管理員身分登入):

  1. 開啟 SSMS,以 Windows 驗證連線。
  2. 右鍵伺服器 → 「屬性」 → 「安全性」。
  3. 將「伺服器驗證」改為 SQL Server 和 Windows 驗證模式。
  4. 確定 → 彈窗提示重新啟動服務 → 點選「是」。
  5. 或使用 T-SQL(需 sysadmin 權限):
    EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
        N'Software\Microsoft\MSSQLServer\MSSQLServer',
        N'LoginMode', REG_DWORD, 2;  -- 2 = 混合模式
    -- 之後重啟 SQL Server 服務

場景二:SQL Server 2008 Express SA 帳號預設停用

現象:剛安裝完 2008 Express,混合模式已啟用,但 SA 仍無法登入。

根因:Express 版預設停用 SA 帳號,且登錄表 LoginMode 可能仍為 1。

解決:

  1. 啟用 SA:
    ALTER LOGIN sa ENABLE;
    ALTER LOGIN sa WITH PASSWORD = 'StrongP@ssw0rd';
  2. 檢查並修正登錄表(路徑視實例名而定):
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer\LoginMode
    值設為 2
  3. 必須重啟 SQL Server 服務 登錄表變更才生效。

場景三:SQL Server 2005 域帳戶服務 + SQL 驗證 + 密碼策略 = 錯誤 18456 狀態 10

觸發條件:

  • SQL Server 服務啟動帳號為域帳號。
  • SQL 登入帳號啟用「強制執行密碼原則」(CHECK_POLICY = ON)。
  • 域控制器上該服務帳號被鎖定或停用。

錯誤日誌特徵:

Error: 18456, Severity: 14, State: 10.

解決方案**:

  1. 解鎖/啟用域控上的服務帳號。
  2. 或建立 SQL 登入時關閉密碼策略:
    CREATE LOGIN app_user WITH PASSWORD = '...', CHECK_POLICY = OFF;
  3. 若為既有帳號:
    ALTER LOGIN app_user WITH CHECK_POLICY = OFF;

微軟曾釋出熱修補程式(需 SP1),但根治仍在於帳號狀態與策略一致性。

快速檢查清單

檢查項目指令/位置預期值
驗證模式SSMS 屬性/登錄表 LoginMode2 (混合模式)
SA 帳號狀態sys.server_principals.is_disabled0 (啟用)
SA 密碼ALTER LOGIN sa WITH PASSWORD符合複雜度或關閉 CHECK_POLICY
TCP/IP 協定SQL Server Configuration Manager已啟用,埠 1433
防火牆Windows 防火牆/雲端安全群組開放 1433 入站
服務帳號狀態AD 使用者與電腦未鎖定、未過期、密碼正確

進階診斷

啟用登入稽核(屬性 → 安全性 → 登入稽核:失敗的登入),查看 ERRORLOG 記錄的 State 碼:

  • State 2, 5:使用者不存在 / 使用者名錯誤
  • State 6:嘗試用 Windows 登入 SQL 驗證介面
  • State 7:帳號停用 / 登入失敗次數過多鎖定
  • State 8:密碼錯誤
  • State 11, 12:Windows 驗證登入 SQL 驗證 / 域帳號問題
  • State 18:密碼過期
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved