做了一件很腦殘的事,神不知鬼不覺,我將一台存儲重要數據的服務器的域名修改了,該服務器是在Hyper-V中創建的VM,修改VM的域名之后,部署在該VM上SQL Server實例就沒有權限訪問了,通常的管理員賬戶也訪問不了,本地的Administrator賬戶沒有密碼,心想,這下完了,捅了這么大的婁子,服務器上1TB的數據怎么搞?雖然,數據最終被成功轉移,但是,過程十分曲折,禁不住感慨:當年欠的技術,必須一點點學回來。情懷不說了,上干貨。
VM上安裝的操作系統是Windows Server 2012 R2 Data Center,使用我的管理員賬戶登錄,登陸失敗。在登錄界面彈出警告消息: “The security database on the server does not have a computer account for this workstation trust relationship”。有這么一堵牆橫亘在我面前,就是項目組不記得本地管理員賬戶 Administrator 的密碼。
既然VM不能訪問,而我又必須登錄到VM,心里有點虛,Windows Server的安全系統是紙老虎嗎?不管怎么樣,不能不戰而被嚇倒,首先要解決的問題是如何破解本地管理員Administrator的密碼。VM上存儲的數據不能被破壞,只能通過Windows鏡像文件嘗試修改操作系統。如何重置本地管理員的密碼?感謝老黃的協助。
step1,修改VM的Firmware,從DVD驅動器加載Windows的鏡像文件
step2,當出現以下界面時,按下任意鍵,從DVD驅動器加載鏡像文件
step3,點擊“Repair your computer”,利用鏡像文件修復計算機
step4,選擇Troubleshoot,在這里能夠使用高級工具修復操作系統
step5,從高級選項中,選擇命令行(Command Prompt)進行高級故障排除操作
step6,進入命令行界面,修改VM開機加載的輔助程序
進入到System32目錄下,先將輔助程序Utilman重命名為Utilman_bak,然后將cmd復制為Utilman。
百度百科:utilman.exe是一個系統進程,為Windows輔助工具管理器程序。
C:
cd \Windows\System32
ren Utilman.exe Utilman_bak.exe
copy cmd.exe Utilman.exe
這樣做的原理是:修改VM開機加載的輔助程序,在Windows登錄界面上有輕松訪問(Ease of access)輔助工具。當我們從登錄界面點擊輕松訪問時,Windows會啟動命令行工具(cmd),此時,雖然我們沒有方法登錄到Windows Server中,但是,我們擁有系統的最高權限,通過cmd,我們可以進行高級的故障排除,或者你想干的任何事。
step7,重啟VM,重置Administrator的密碼
上述設置完成之后,重啟VM,正常進入到登錄界面,點擊登錄界面的輕松訪問(Ease of access)輔助工具,
由於輔助工具的執行文件被替換為cmd,Windows會啟動命令行工具,在命令行工具中,通過net user命令,重置Administrator的密碼
step8,使用Administrator的新密碼登錄VM
終於,我還是成功登錄VM了,在第一時間打開SSMS,登錄SQL Server的默認實例 VMxxx,發現登錄不上,SQL Server拋出以下錯誤消息:
認真查看該錯誤消息,當建立到SQL Server的連接時,出現網絡相關或指定實例的錯誤,SQL Server實例找不到或者不可訪問。在域中,雖然使用本地管理員賬戶登錄默認實例,但是,由於域名服務器的存在,仍然會出現本地管理員登錄不了本地的SQL Server默認實例,根本原因是建立的網絡連接路由不到指定的SQL Server的實例名。在本機上,我們可以不通過網絡路由器,直接使用localhost,或 點(.)登錄本機 ,經過幾番曲折,SSMS登錄成功,終於打開數據庫,喜極而泣。
但是,這不是真實的情況,實際上,在登錄SQL Server失敗時,我走了另外一條曲折的路。因為,當時的我有點慌張,誤以為是權限的問題,過程雖然曲折,但是,還是挺有趣,用到DAC( Dedicated Administrator Connection,專用管理員連接)為本機增加數據庫的管理員權限。
step1,在命令行工具中關閉SQL Server服務
net stop MSSQLServer
step2,通過單用戶模式啟動SQL Server服務,只允許sqlcmd登錄SQL Server實例
net start MSSQLServer -msqlcmd
-msqlcmd:該參數指定以單用戶模式打開MSSQLServer服務,只允許sqlcmd程序登錄該服務
step3,使用DAC連接到SQL Server實例
sqlcmd -A
-A:Logs in to SQL Server with a Dedicated Administrator Connection (DAC). This kind of connection is used to troubleshoot a server.
step4,將本地管理員授予sysadmin角色,如果本地管理員不是SQL Server實例的Login,需要新建Windows域登錄名
create login [VMxxx\Administrator] from windows with default_database=master; go alter server role sysadmin add member [VMxxx\Administrator] go
授予Administrator數據庫管理員的權限之后,使用SQL Server的默認實例名依然登錄不上,后來,靜下心來,仔細看了看登錄失敗的錯誤信息,才恍然大悟,特寫一篇隨筆,記錄一下自己無意“放火”和曲折“救火”的經歷。在這里很感謝項目經理麥扣的包容,老黃的協助,謝謝!
參考文檔: