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 ,然后把相关资料库档案都複製过去后,然后把那些档案给挂回来,但是这样虽然看起来好像是可以使用的方式,但是你原本的一些帐号设定,排程设定都没有办法过去,甚至如果你资料库有设定透明资料加密或者是备份加密,如果没有先把相关必要资讯都汇出的情况下,重建真的不见得会是个很容易的方法。