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

SQL Server 遺失 sa 密碼與 Windows 登入被刪:單一使用者模式緊急修復指南

     編輯:關於SqlServer

最棘手的 SQL Server 存取失效情境:sa 停用、僅允許 Windows 驗證、Windows 登入被誤刪、無其他 sysadmin 成員。本文提供經實測可行的單一使用者模式(-m/-f)緊急修復流程,可重獲系統管理員存取權並修正驗證模式。

問題情境

  • SQL Server 驗證模式:Windows Authentication Only
  • sa 登入:停用
  • 內建 BUILTIN\Administrators 或特定 Windows 登入:已被刪除
  • 無其他 sysadmin 固定伺服器角色成員

結果:SSMS 無法連線,OSQL -E 亦失敗。

核心原理:-m 單一使用者模式

啟動參數加入 -m(或 -f)後,本機 Administrators 群組任何成員均可透過 Windows 驗證以 sysadmin 身分連線,不檢查 syslogins 是否存在該登入。Microsoft 官方文件明確說明:

"Any member of the computer's local Administrators group can then connect to the instance of SQL Server as a member of the sysadmin fixed server role."

完整修復步驟(以 SQL Server 2008/2012/2014/2016/2019 通用)

步驟 1:停止 SQL Server 服務

net stop MSSQLSERVER  -- 預設執行個體
-- 或
net stop MSSQL$INSTANCE_NAME  -- 命名執行個體

步驟 2:以單一使用者模式啟動

  1. 開啟 SQL Server 組態管理員 → SQL Server 服務。
  2. 右鍵目標執行個體 → 內容 → 啟動參數 索引標籤。
  3. 在 指定啟動參數 輸入框鍵入 -m → 新增 → 確定。
  4. 啟動服務(右鍵 → 啟動)。

或使用命令列暫時啟動(不修改永久參數):

cd "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn"
sqlservr.exe -m -s MSSQLSERVER

步驟 3:使用 SSMS 連線(關鍵技巧)

  1. 開啟 SSMS,取消預設連線對話方塊。
  2. 工具列 新增查詢 → 連線對話方塊出現時,選擇 Windows 驗證 → 連線。
  3. 此時本機管理員帳戶可順利連入。

步驟 4:執行修復 T-SQL 腳本

-- 1. 啟用 xp_cmdshell(修改登錄需用)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE WITH OVERRIDE;
GO

-- 2. 修改登錄將驗證模式改為混合模式 (2 = Mixed)
USE master;
GO
EXEC xp_instance_regwrite
    N'HKEY_LOCAL_MACHINE',
    N'Software\Microsoft\MSSQLServer\MSSQLServer',
    N'LoginMode', REG_DWORD, 2;
GO

-- 3. 建立本機管理員 Windows 登入並授予 sysadmin
-- 假設電腦名為 SERVER01,帳號為 Administrator
CREATE LOGIN [SERVER01\Administrator] FROM WINDOWS;
GO
EXEC sp_addsrvrolemember @loginame = 'SERVER01\Administrator', @rolename = 'sysadmin';
GO

-- 4. (可選)重設 sa 密碼並啟用
ALTER LOGIN sa WITH PASSWORD = 'NewStrongP@ssw0rd', CHECK_POLICY = OFF;
ALTER LOGIN sa ENABLE;
GO

-- 5. 關閉 xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
GO

步驟 5:移除 -m 參數並正常重啟

  1. SQL Server 組態管理員 → 啟動參數 → 移除 -m。
  2. 重啟 SQL Server 服務。

步驟 6:驗證修復結果

  • SSMS 使用 SQL Server 驗證、sa + 新密碼連線 → 成功。
  • 或使用 Windows 驗證(本機管理員)連線 → 成功。
  • 伺服器屬性 → 安全性 → 驗證模式顯示 SQL Server 和 Windows 驗證模式。

延伸情境:電腦重命名導致 Windows 登入失效

若僅修改電腦名稱,原 Windows 登入格式 OLDNAME\User 失效。同樣可用 -m 模式進入,執行:

CREATE LOGIN [NEWNAME\User] FROM WINDOWS;
EXEC sp_addsrvrolemember 'NEWNAME\User', 'sysadmin';

或直接修改現有登入名稱(SQL Server 2005+):

ALTER LOGIN [OLDNAME\User] WITH NAME = [NEWNAME\User];

總結清單

  1. 停止服務 → 加入 -m → 啟動服務。
  2. SSMS「新增查詢」以 Windows 驗證連線(本機管理員)。
  3. 啟用 xp_cmdshell → 修改登錄 LoginMode=2 → 建立/修正 Windows 登入 → 授予 sysadmin → (可選)重設 sa → 關閉 xp_cmdshell。
  4. 移除 -m → 正常重啟 → 驗證雙模式登入。

此法為官方支援的緊急存取機制,無需重裝 Master 資料庫,可在數分鐘內恢復控制權。

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