SQLSERVER誤刪Windows登入使用者驗證方式使用Windows身份驗證的解決方法
想起來之前著急哥問我的一個問題,一個DBA刪除了Windows登入使用者,而且SQLSERVER伺服器的驗證方式是Windows身份驗證
怎麼辦??
我當時給他的答覆是:重灌系統資料庫master
假設我們遇到很糟糕的情況
sa被禁用,伺服器身份驗證為Windows身份驗證模式,Windows登入使用者被刪,沒有其他sysadmin角色的登入使用者
步驟一:
停掉SQLSERVER:在命令列 net stop mssqlserver
步驟二:
轉到SQLSERVER的安裝目錄
然後加上/m /f 引數
步驟三:以為單使用者模式啟動SQLSERVER
步驟四:開啟SSMS
這時候一定不要馬上進行連線,需要點選取消,然後在左上角的點選新建查詢,這個步驟跟DAC(專用管理員連線)的步驟是一樣的
你會發現用Windows登入使用者這時候可以登入
步驟五:執行下面的SQL指令碼
1 --開啟xp_cmdshell功能 2 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35) 3 @configvalue = 1 -- int 4 RECONFIGURE WITH override 5 6 7 --修改登錄檔,修改身份驗證為混合驗證方式8 USE [master] 9 GO 10 EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2 11 GO 12 13 --建立登入名 14 CREATE LOGIN [計算機名\Administrator] FROM WINDOWS; 15 GO 16 17 --賦予登入名的許可權為sysadmin 18 USE master 19 GO 20 EXEC [sys].[sp_addsrvrolemember] @loginame = '計算機名\Administrator', -- sysname 21 @rolename = sysadmin -- sysname 22 23 --關閉xp_cmdshell功能 24 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35) 25 @configvalue = 0 -- int 26 RECONFIGURE WITH override
這時候身份驗證方式已經改為混合驗證方式
步驟六:關掉SQLSERVER,再重新啟動
開啟SQLSERVER配置管理器,啟動SQLSERVER
步驟七:登入SQLSERVER
回到SSMS,可以看到這時候恢復正常了
總結
感謝i6first大俠,之前一直以為無法子了,想不到他想到了用單使用者模式啟動的方法來進入SQLSERVER
如有不對的地方,歡迎大家拍磚o(∩_∩)o
2014-2-26補充:
在進行上面操作之前,SQL BROSWER服務一定要開啟,否則在進行步驟四的時候會提示資料庫處於單使用者模式,不能登入!!
2014-11-20補充:
今晚某童鞋找到我,說他禁用了Windows登入使用者和sa,無辦法再登入SQLSERVER,伺服器上跑著百萬PV的網站
停機的話電話就會打爆,他使用了本文的方法,可惜不奏效
詳細講解:
如果禁用了sa和禁用了Windows登入使用者(注意:是禁用不是刪除)
那麼使用上述方法的時候,在啟動SQLSERVER的時候會報錯:Windows帳戶 計算機名/Administrator 已被禁用
解決方法:在Windows上新建一個 Administrator組的Windows帳戶 比如 test帳戶,隸屬於Administrator組
然後切換Windows登入使用者到test ,使用上面的方法,用“管理員身份執行” CMD,以/m /f 啟動sqlserver
用sqlcmd 進入命令列就可以了
原理:sqlserver裡的Windows帳戶是跟Windows的帳戶用SID繫結對映的
SQL首先使用你當前登入的Windows帳戶來登入sqlserver,這樣就導致了當Windows帳戶被禁用的話他不會使用sa來登入(也就是其他擁有sysadmin許可權的
登入使用者來登入,不考慮SQL登入驗證)
我這裡的方法是切換到別的Windows帳戶下,這樣SQL就找不到當前Windows帳戶跟SQL裡面的登入使用者的SID登入對映
SQLSERVER就會使用sa來登入