問題:
開啟SQL Server 2008之後,本機系統管理員群組不再需要手動添加,因為在安裝的時候已經預設添加。你甚至只需要把目前使用者手動添加到本地管理使用者即可。這意味著,特別是如果你不使用混合認證模式(或者忘記了sa密碼),你可能會被拒絕登入自己的SQL Server執行個體。我遇到過一個情景,一個職員離開,但是他的windows帳號,只擁有SQL Server管理員權限,會完全阻塞系統。當然也只有這個人知道sa密碼。作為本地管理員甚至網域系統管理員將對你沒有協助。
典型的解決方案是以單一使用者模式重啟SQL Server。但是,這將要求一定時間的停機。對於某些系統,這是不可接受的。並且依靠管理伺服器的需要,可能沒有切實可行的等待維護伺服器的計劃。
一個更加極端的方法是關閉SQL Server,複製所有MDF/LDF檔案,安裝新的SQL Server執行個體,並附加所有使用者資料庫。除了停機時間外,你還要面對重新建立系統資料庫、登入名稱、串連伺服器、作業和其他資料庫以外的元素以使得系統能夠重新使用。另外,除非你卸載舊的執行個體,不然新的執行個體需要使用具名執行個體,會導致所有用戶端應用都需要跟著升級。
解決方案:
使用以下方法可以無痛、不停機解決上面問題:PsExec。但是這不是它的主要設計目標。它允許你以NT AUTHORITY\SYSTEM帳號運行程式,和“常規”管理員帳號不同——具有天生訪問SQL Server的許可權。
這個進程的使用非常簡單。登入SQL Server啟動並執行伺服器,並要具有本地管理員權限的帳號。下載並開啟PsExec.exe。以管理員身份開啟。執行下列命令,注意路勁填寫你SQL Server Management Studio 的實際路徑:
PsExec -s -i "C:\Program Files(x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Ssms.exe" |
命令告訴PsExec以管理員(-s)和互動式(-i)來運行SSMS。
如果你不是管理員,會返回一條錯誤資訊。你必須同意授權條款才能繼續操作。當登入SSMS後,會提示你已連線的服務器。你需要注意要用windows認證模式登入,並且使用者名稱是硬式編碼,如:NT AUTHORITY\SYSTEM:
當你登入以後,展開【物件總管】,可以看到你是以NT AUTHORITY\SYSTEM來串連:
現在,你可以進入【安全性】→【登入名稱】,然後把你的帳號添加為sysadmin。添加其他管理帳號,修改sa密碼,和其他能使你的執行個體處於可控狀態的事情。
警告:
你必須假裝成NTAUTHORITY\SYSTEM 的本地管理員。你必須禁用UAC。必須可以遠程操作,但是自從主要精力放到虛擬機器之後,我沒測試過。
如果你更改了sa密碼。並且外部程式使用sa帳號,你需要升級這些程式。可以參考:a tip for updating the password used in maintenance plans. 使用CTRL+C退出命令列。
結論:
PsExec可以解決很多讓你頭疼的問題。也希望在安裝SQL Server的時候添加足夠的管理員,以便減少上述問題的出現。