公司有一台安装在Windows 2000 Server上的SQL Server 2000数据库服务器,由于仅仅是作为数据库服务器用,平时甚少登录桌面,即使有登录,为了更好的安全性,也都是用的另一个专门创建的低权限账户进入桌面,正因如此,天长日久,倒搞忘了本机管理员的密码,由于一些原因,这台服务器也没加入域,所以也不能指望用域管理员的账户登入,但今天又必须用管理员用户登录进行一些操作,该怎么办呢?
以前也曾听过很多种密码忘记后的解决方法,但都一时救不了近火,正在发愁之际,突然想到了SQL Server 2000的系统扩展存储过程xp_cmdshell,一直以为它不过是个漏洞,想不到此时还可以帮我大忙(当然关键是还记得那个sa的密码)。下面就来看看怎样利用xp_cmdshell来登入服务器。
首先需要一个客户端连接上SQL Server 2000服务器,由于当时没有SQL Server 2000的光盘,所以也就没法直接用它安装图形化的SQL Server 客户端,还好找到一张Office 2000的光盘,从中搜索到osql.exe文件(osql可以说是命令行下的SQL Server客户端,它相当于isql工具,但功能更加强大,支持SQL Server 2000的全部功能,用osql /?可以查看它的详细用法)。于是打开命令行窗口进入osql.exe所在目录,执行下面的命令:
osql -S 192.168.0.88 -U sa ?P password -Q “xp_cmdshell 'net user test 123 /add'”
osql -S 192.168.0.88 -U sa -P password -Q “xp_cmdshell 'net localgroup administrators test /add'”
通过上面的操作我就在服务器上新添加了一个名为test,密码为123的管理员账户。然后我就用它登录并修改了administrator的密码,然后删掉了test账户。看一下,是不是这种方法还不错,其实这也看出了xp_cmdshell的双面性,利用好时,它真的可以成为一个好的管理工具,只是为了安全性,你的数据库的sa密码一定要设好才行。