SQL Server 的安全性允許 SQL 帳號和 Windows 帳號登入 , 但如果同時都忘記或被竄改的狀況下 , 該如何搶回 SQL Server 的控制權
好一陣子沒有寫文章,剛好最近一個朋友傳來一個訊息說要打我臉,主要是因為以往跟他說,「SQL Server 在 Windows 的環境下,是無法關閉 Administrators 的權限,因此只要掌握 Windows Administrator 的帳號就一定可以登入 SQL Server」
但是朋友覺得這不大可能,就想要找個機會來打臉一下提醒一下,因此就弄了一個環境把 SQL Server 內的 Administrator 的帳密給關閉,要來考驗一下老人家雖然太久沒有使用 SQL Server ,但管理的工作還是沒有生疏
首先看一下這個測試環境,安全性的設定中關於伺服器驗證是設定為「SQL Server 及 Windwos 驗證模式」

而從 SSMS 的畫面中看得出來,他已經把這台 SQL Server 中的 Administrator 帳號給關閉了

因此當我們嘗試使用 Windows 驗證登入的時候,這個時候是無法登入的

在這個測試環境中,他並不是把 Administrator 的帳號給移除,而是把它給 「disable」,因此在這裡我先在測試環境中新建一個 James 的帳號,並且賦予該帳號具有 Administrators 群組的權限

接下來就是利用 CMD 的模式下來使用相關指令進行處理了,這裡我們把指令分成三個部分
- 將 SQL Server 重新啟動,啟動的時候指定 -m 的參數,該參數主要是指定 Single User 模式
- 透過指令建立一個新的 Login ,並且賦予 sysadmin 的權限
- 再次重新啟動 SQL Server

當完成上述指令後,我們就可以輕鬆使用 SSMS 來登入系統使用了,此時我們就可以很順利的登入,並且具有 sysadmin 的角色,此時就可以來把資料庫相關的問題或錯誤的設定給調整,等確認無誤之後,後續就可以把 James 這個在 SQL Server 內的登入和 Windows 內的帳號給刪除了。

透過上述方式就可以很容易地回復原本的狀態,也不用去使用一些很偏門的方式,像是有人會嘗試重新建立一個 SQL Server ,然後把相關資料庫檔案都複製過去後,然後把那些檔案給掛回來,但是這樣雖然看起來好像是可以使用的方式,但是你原本的一些帳號設定,排程設定都沒有辦法過去,甚至如果你資料庫有設定透明資料加密或者是備份加密,如果沒有先把相關必要資訊都匯出的情況下,重建真的不見得會是個很容易的方法。