錯誤現象
無法連接到 192.1.1.19。
使用者 'shop' 登入失敗。 (Microsoft SQL Server,錯誤: 18456)
錯誤 18456 狀態碼對照 (關鍵診斷線索)
| State | 含義 | 常見原因 |
| 1 | 錯誤資訊不足 | 需查看 SQL Errorlog 取得真實 State |
| 2, 5 | 使用者帳號不存在 | 拼錯、未建立、登入名 vs 使用者名混淆 |
| 6 | 嘗試用 Windows 登入 SQL 驗證 | 連接字串 Trusted_Connection=Yes 但用 SQL 登入 |
| 7 | 帳號停用 | ALTER LOGIN ... DISABLE |
| 8 | 密碼錯誤 | 密碼錯誤、大小寫、特殊字元 |
| 9 | 密碼過期 | 密碼原則強制變更 |
| 11, 12 | 登入有效但伺服器存取被拒 | CONNECT SQL 權限、端點權限 |
| 18 | 密碼必須變更 | 首次登入、管理員重設 |
系統atic 排查步驟
1. 確認基礎服務與網路
- SQL Server 服務執行中
- SQL Server Browser 服務執行中 (具名實例必須)
- TCP/IP 協定啟用 (SQL Server 組態管理器)
- 防火牆開放 1433 (預設實例) 或動態埠 (具名實例)
- 可用
telnet IP 1433 或 Test-NetConnection 測試連通性
2. 驗證模式設定
-- SSMS:右鍵伺服器 → 內容 → 安全性
-- 選擇「SQL Server 和 Windows 驗證模式」
-- 需重啟 SQL Server 服務生效
3. 檢查登入帳號狀態
-- 啟用 sa / 指定帳號
ALTER LOGIN [shop] ENABLE;
-- 重設密碼
ALTER LOGIN [shop] WITH PASSWORD = 'NewStrongPass123!';
-- 確認預設資料庫存在
ALTER LOGIN [shop] WITH DEFAULT_DATABASE = [master];
4. 查看 SQL Server 錯誤日誌取得真實 State
-- SSMS:管理 → SQL Server 記錄檔 → 目前錯誤記錄檔
-- 搜尋 18456,記錄 State 值
5. 連接字串常見錯誤
| 錯誤類型 | 錯誤範例 | 正確範例 |
| 埠號遺漏 | Server=192.1.1.19 | Server=192.1.1.19,1433 |
| 具名實例格式 | Server=192.1.1.19\SQLEXPRESS | Server=192.1.1.19\SQLEXPRESS |
| 驗證模式衝突 | Trusted_Connection=Yes;User ID=sa | 移除 Trusted_Connection 或移除 User ID |
快速修復腳本
-- 1. 啟用混合驗證 (需重啟服務)
EXEC xp_instance_regwrite N'System\CurrentControlSet\Services\MSSQLSERVER',
N'LoginMode', REG_DWORD, 2; -- 2 = 混合模式
-- 2. 啟用 sa、設定強密碼
ALTER LOGIN [sa] ENABLE;
ALTER LOGIN [sa] WITH PASSWORD = 'ComplexPass123!', CHECK_POLICY = ON;
-- 3. 確認 TCP/IP 啟用、固定埠 1433
-- 需用 SQL Server 組態管理器操作