首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server sa 登入失敗排除:帳號鎖定、密碼重設、外圍應用配置

     編輯:關於SqlServer

前言

遇到 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) 或重設密碼自動解鎖

二、快速排除流程 (依序執行)

步驟 1:確認 SQL Server 服務狀態

-- 命令列
net start MSSQLSERVER
net start SQLSERVERAGENT
-- 或 services.msc 圖形介面確認

若服務未啟動,啟動後再測試登入。

步驟 2:啟用遠端連線通訊協定 (解決 Shared Memory 錯誤)

  1. 啟動 SQL Server Configuration Manager。
  2. SQL Server Network Configuration → Protocols for MSSQLSERVER (或具名實例)。
  3. 右鍵 TCP/IP → Enable;右鍵 Named Pipes → Enable (視需求)。
  4. TCP/IP 屬性 → IP Addresses → IPAll → TCP Port = 1433 (清空 TCP Dynamic Ports)。
  5. 重新啟動 SQL Server 服務。

步驟 3:以 Windows 驗證登入 SSMS 進行修復 (關鍵跳板)

  1. 開啟 SSMS,伺服器類型選 Database Engine,驗證選 Windows Authentication,連線。
  2. 若 Windows 驗證也失敗,檢查 SQL Server 外圍應用配置器 (Surface Area Configuration) → 「服務和連線的外圍應用配置器」→ 遠端連線 → 選「本地和遠端連線」→ 「僅使用 TCP/IP」→ 套用 → 重啟服務。

步驟 4:重設 sa 密碼並解鎖 (核心修復)

  1. 在 SSMS 物件總管:安全性 → 登入 → 右鍵 sa → 屬性。
  2. 一般頁:輸入新密碼、確認密碼 (建議強密碼:長度 16+、大小寫、數字、特殊字元)。
  3. 狀態頁:登入 → 已啟用;若顯示「鎖定」,重設密碼即自動解鎖,或勾選「解鎖」 (SQL 2005+)。
  4. 確定 → 重新嘗試 SQL 驗證登入 sa。

等效 T-SQL (在 Windows 驗證查詢視窗執行):

ALTER LOGIN [sa] WITH PASSWORD = 'NewStrongPassword!@#', UNLOCK, CHECK_POLICY = ON;
GO

步驟 5:驗證混合驗證模式

  1. SSMS → 伺服器右鍵「屬性」→ 安全性** 頁籤。
  2. 伺服器驗證選 SQL Server 和 Windows 驗證模式。
  3. 若原為「僅 Windows」,修改後**必須重啟 SQL Server 服務**生效。

三、根因深度分析

  1. 帳號鎖定機制:SQL Server 依據 LOGINPROPERTY('sa', 'BadPasswordCount') 累計失敗次數,超過原則閾值 (預設 10 分鐘內 10 次) 自動鎖定。常見於暴力破解嘗試、應用程式連線字串密碼錯誤持續重試、排程作業密碼過期。
  2. Shared Memory 錯誤誤導性:此錯誤實為「用戶端嘗試用 Shared Memory 管道連線本機實例,但實例未啟動或管道不可用」,而非網路問題。啟用 TCP/IP 並確保服務運行即可解決。
  3. sa 帳號高風險:sa 為內建 sysadmin,已知名稱、最高權限,極易成攻擊目標。生產環境建議:重命名 sa、停用 sa、建立專用低權限應用帳號、啟用登入稽核、防火牆限制 1433 埠來源 IP。

四、預防性最佳實踐

  • 停用/重命名 sa:ALTER LOGIN [sa] DISABLE; ALTER LOGIN [sa] WITH NAME = [OldSA_Renamed];
  • 應用程式使用最小權限帳號:僅授 db_datareader/db_datawriter 或 EXECUTE 預存程序。
  • 密碼原則:強制複雜度、定期輪換、鎖定原則 (登入屬性 → 強制密碼原則/鎖定)。
  • 登入稽核:伺服器屬性 → 安全性 → 登入稽核 → 失敗的登入** 或 **成功和失敗的登入**;定期審查 sys.fn_get_audit_file 或錯誤記錄。
  • 連線加密:強制 TLS 1.2,防止密碼明文傳輸被竊聽。

五、總結

sa 登入失敗 90% 可透過「Windows 驗證登入 SSMS → 重設密碼/解鎖 → 啟用 TCP/IP → 確認混合模式」四步驟解決。若頻發,必為暴力破解或應用程式配置錯誤,請立即落實「停用 sa、專用帳號、稽核、防火牆」四大防護措施,將攻擊面降至最低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved