遇到 sa 帳號無法登入,錯誤訊息「已成功與伺服器建立連接,但是在登入過程中發生錯誤 (provider: 共用記憶體提供者, error: 0 - 管道的另一端上無任何程序)」或單純「登入失敗」,常見原因有三:帳號被鎖定、密碼錯誤/過期、遠端連線通訊協定未啟用。本文提供快速排除步驟與根因分析。
| 錯誤訊息 | 可能原因 | 對應處理 |
|---|---|---|
| Login failed for user 'sa'. (Error 18456) | 密碼錯誤、帳號鎖定、SQL 驗證模式未啟用 | 重設密碼、解鎖帳號、啟用混合模式 |
| 管道的另一端上無任何程序 (Shared Memory Provider, Error 0) | SQL Server 服務未啟動 / 僅啟用 Shared Memory 管道、遠端管道未啟用 | 啟動服務、啟用 TCP/IP/Named Pipes |
| 使用者 'sa' 登入失敗。原因: 帳號已鎖定 | 登入失敗次數超過鎖定閾值 (預設 10 分鐘內 10 次) | 解鎖帳號 (ALTER LOGIN ... UNLOCK) 或重設密碼自動解鎖 |
-- 命令列
net start MSSQLSERVER
net start SQLSERVERAGENT
-- 或 services.msc 圖形介面確認
若服務未啟動,啟動後再測試登入。
sa。等效 T-SQL (在 Windows 驗證查詢視窗執行):
ALTER LOGIN [sa] WITH PASSWORD = 'NewStrongPassword!@#', UNLOCK, CHECK_POLICY = ON;
GO
LOGINPROPERTY('sa', 'BadPasswordCount') 累計失敗次數,超過原則閾值 (預設 10 分鐘內 10 次) 自動鎖定。常見於暴力破解嘗試、應用程式連線字串密碼錯誤持續重試、排程作業密碼過期。sa 為內建 sysadmin,已知名稱、最高權限,極易成攻擊目標。生產環境建議:重命名 sa、停用 sa、建立專用低權限應用帳號、啟用登入稽核、防火牆限制 1433 埠來源 IP。ALTER LOGIN [sa] DISABLE; ALTER LOGIN [sa] WITH NAME = [OldSA_Renamed];db_datareader/db_datawriter 或 EXECUTE 預存程序。sys.fn_get_audit_file 或錯誤記錄。sa 登入失敗 90% 可透過「Windows 驗證登入 SSMS → 重設密碼/解鎖 → 啟用 TCP/IP → 確認混合模式」四步驟解決。若頻發,必為暴力破解或應用程式配置錯誤,請立即落實「停用 sa、專用帳號、稽核、防火牆」四大防護措施,將攻擊面降至最低。