原文是sqlserver 2005的,测试windows 2016 + sqlserver 2017时此功能已经不可用,不过还是记录下重置方法。
原理是通过sqlserver的OLE选项创建一个用户并将其添加至Administrator组,随后便可用该用户登录服务器修改administrator用户密码。OLE相当于给你一个cmd环境,让你可以输入cmd命令。
1. 启用OLE
--打开高级选项,看Ole Automation Procedures OLE自动化开启了没有
EXEC [sys].[sp_configure] @configname = 'show advanced options', -- varchar(35)
@configvalue = 1 -- int
RECONFIGURE WITH override
GO
--查看是否开启
EXEC [sys].[sp_configure]
--如果没有就开启
EXEC [sys].[sp_configure] @configname = 'Ole Automation Procedures', -- varchar(35)
@configvalue = 1 -- int
RECONFIGURE WITH override
GO
--查看是否开启
EXEC [sys].[sp_configure]
2. 添加用户并加入Administrators组
--添加一个hack用户,所属用户组为Administrators
DECLARE @shell INT
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user hack /add'
EXEC SP_OAMETHOD @shell,'run',null, 'net localgroup Administrators hack /add'
--或者直接改密码,不添加用户
EXEC SP_OAMETHOD @shell,'run',null, 'net user hack 123456'
这一步测试是失败的,检查服务器也没有新加用户。如果成功,用该用户登录服务器修改administrator用户密码即可。
注意如果是用远程桌面登录的话,必须要为帐号添加一个密码
net user 用户名 密码 /add 建立用户
# 或者更改当前已存在的管理员账户的密码 修改naruto的密码为123456
net user naruto 123456