從單用戶模式到登錄表修改,找回最高權限
遺失 `sa` 密碼是常見運維場景。本文提供三種不同前提條件下的重置方案,覆蓋大多數情況。
方案一:Windows 驗證可用時 (最簡單)
前提:本機管理員群組成員可用 Windows 驗證登入。
- SSMS 以 Windows 驗證連線
- 新增查詢視窗執行:
EXEC sp_password NULL, 'NewStrongPassword', 'sa';
即可將 `sa` 密碼重設為 `NewStrongPassword`。
方案二:單用戶模式啟動 (Windows 驗證也失效時)
- **停止 SQL Server 服務** (服務管理器或 `net stop MSSQLSERVER`)
- **以單用戶模式啟動**:命令列執行 `sqlservr.exe -m -s MSSQLSERVER` (具體路徑視安裝實例而定)
- 另開視窗用 `sqlcmd -S . -E` 連線 (此時任何本機管理員均為 sysadmin)
- 執行:
ALTER LOGIN sa WITH PASSWORD = 'NewStrongPassword' UNLOCK;
GO
- 關閉單用戶模式視窗,正常重啟 SQL Server 服務
方案三:登錄表修改驗證模式 (極端情況)
若混合模式被關閉且無 Windows 驗證入口,可強制切回混合模式:
- 停止 `MSSQLSERVER` 及 `SQLSERVERAGENT` 服務
- 開啟 `regedit`,定位至:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\LoginMode
(`MSSQL.x` 為實例編號,預設實例通常為 `MSSQL.1`)
- 將 `LoginMode` 值改為 `2` (十六進位),代表混合模式
- 重啟 SQL Server 服務
- 再依方案一或二重設 `sa` 密碼
安全建議
- 重設後立即啟用密碼策略:`ALTER LOGIN sa WITH CHECK_POLICY = ON;`
- 考慮停用 `sa`,改建專用低權限應用帳號
- 定期備份 `master` 資料庫,災難恢復更從容