案例一:變更作業系統登入密碼導致 SQL Server 服務啟動失敗
原因
SQL Server 服務(MSSQLSERVER)若設定為「此帳戶」並指定特定網域/本機帳號,該帳號密碼變更後,服務無法以新密碼登入,導致啟動失敗。預設安裝若選「本地系統帳戶」則不受影響。
解決步驟
- 開啟「服務」(services.msc 或「我的電腦」→ 管理 → 服務)。
- 找到 MSSQLSERVER(或具名實例
MSSQL$InstanceName)。
- 右鍵 → 內容 → 「登入」頁籤。
- 選擇「本地系統帳戶」或 保留「此帳戶」並輸入新密碼。
- 確定 → 重新啟動服務。
最佳實務: 使用專用網域服務帳號(非人員帳號),設定密碼永不過期,並納入密碼管理系統定期輪換。
案例二:遺忘 sa 密碼,如何重置?
前提條件
- 具備 Windows 系統管理員權限。
- SQL Server 允許 Windows 驗證模式(混合模式或僅 Windows 模式)。
方法一:企業管理員 / SSMS 圖形化介面(SQL 2000/2005+)
- 以 Windows 系統管理員身分登入伺服器。
- 開啟企業管理員(SQL 2000)或 SSMS(SQL 2005+),使用 Windows 驗證連線。
- 展開「安全性」→ 「登入」→ 右鍵 sa → 內容/屬性。
- 輸入新密碼並確認 → 確定。
方法二:單一使用者模式啟動 + sqlcmd(通用、無需 GUI)
- 停止 SQL Server 服務。
- 以命令列啟動單一使用者模式:
sqlservr.exe -m -s INSTANCE_NAME(預設實例可省略 -s)。
- 另開視窗,使用
sqlcmd -E -S .\INSTANCE_NAME 連線(Windows 驗證,系統管理員自動映射為 sysadmin)。
- 執行:
ALTER LOGIN sa WITH PASSWORD = 'NewStrongPassword!';
- 關閉 sqlservr.exe 控制台視窗,正常啟動 SQL Server 服務。
方法三:修改登錄略過驗證(舊版應急,不推薦)
SQL 7.0/2000 可修改 HKLM\Software\Microsoft\MSSQLServer\MSSQLServer\LoginMode 為 2(混合模式),但仍需知曉一組 sysadmin 權限的 Windows 帳號。
安全性建議
- 停用 sa 或重命名:
ALTER LOGIN sa DISABLE; / ALTER LOGIN sa WITH NAME = [NewAdminName];
- 強制密碼策略:
ALTER LOGIN sa WITH PASSWORD = '...', CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
- 稽核登入失敗: 伺服器屬性 → 安全性 → 稽核「失敗的登入」。
- 密碼輪換自動化: 結合 PowerShell + 排程作業定期更換服務帳號與 sa 密碼,並同步更新應用程式連線字串(建議使用 Azure Key Vault / 密碼保管庫)。