SQLSERVER误删SA密码 无法Windows登录用户的解决办法
想起来之前着急哥问我的一个问题,一个dba删除了windows登录用户,而且sqlserver服务器的验证方式是windows身份验证。
怎麽办??
我当时给他的答复是:重装系统数据库master
今天看到这篇文章没有了sa密码,无法windows集成身份登录,dba怎么办?,有思路了
假设我们遇到很糟糕的情况
sa被禁用,服务器身份验证为windows身份验证模式,windows登录用户被删,没有其他sysadmin角色的登录用户
步骤一:
停掉sqlserver:在命令行 net stop mssqlserver
步骤二:
转到sqlserver的安装目录
然后加上/m /f 参数
步骤三:以为单用户模式启动sqlserver
步骤四:打开ssms
这时候一定不要马上进行连接,需要点击取消,然后在左上角的点击新建查询,这个步骤跟dac(专用管理员连接)的步骤是一样的
你会发现用windows登录用户这时候可以登录
步骤五:执行下面的sql脚本
1 --打开xp_cmdshell功能 2 exec [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35) 3 @configvalue = 1 -- int 4 reconfigure with override 5 6 7 --修改注册表,修改身份验证为混合验证方式 8 use [master] 9 go10 exec xp_instance_regwrite n'hkey_local_machine', n'software\microsoft\mssqlserver\mssqlserver', n'loginmode', reg_dword, 211 go12 13 --创建登录名14 create login [计算机名\administrator] from windows;15 go16 17 --赋予登录名的权限为sysadmin18 use master19 go20 exec [sys].[sp_addsrvrolemember] @loginame = '计算机名\administrator', -- sysname21 @rolename = sysadmin -- sysname22 23 --关闭xp_cmdshell功能24 exec [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35)25 @configvalue = 0 -- int26 reconfigure with override
这时候身份验证方式已经改为混合验证方式
步骤六:关掉sqlserver,再重新启动
打开sqlserver配置管理器,启动sqlserver
步骤七:登录sqlserver
回到ssms,可以看到这时候恢复正常了
总结
感谢i6first大侠,之前一直以为无法子了,想不到他想到了用单用户模式启动的方法来进入sqlserver。
没有了sa密码,无法windows集成身份登录,dba怎么办?
一同事反馈sql无法正常登录了,以前都是通过windows集成身份验证登录进去的(sa密码早忘记了),今天就改了服务器的机器名,现在无论如何都登录不进去。
sql登录时如果采用windows集成身份验证,登录框将会以“机器名\当前系统用户名”的格式显示登录名,而且登录名和密码都是灰色的,不允许用户输入。
了解到同事刚刚修改了服务器的机器名,因此在sql的登陆框中显示“新机器名\当前系统用户名”。要知道windows集成身份验证能登录的原因是在sql的登录名中已经包括了该用户名,原来的用户名在sql安装的时候已经记录到了sql中,如果机器名变更了,“新机器名\当前系统用户名”肯定无法正常登录。
网上看到有人说可以采用osql–s instancename –e(在命令行窗口中输入)登录进去后再去修改sa的密码,一番尝试后发现是扯谈,因为采用这种方式的前提是需要windows集成身份能够登录。
后来在微软的官网上看到一篇文档,原来只要在sql的启动参数中加一个“-m”的选项(记得在-m前加分号),然后需要重启sql服务,再次用sql management studio的windows集成身份验证登陆就可以了。
-m表示单用户登录。细心的读者可能会质疑了:只是加了-m,但最后还是采用的windows集成身份验证,理论说跟之前使用sqlos –s instancename –e有什么区别呢?
这个问得非常专业。当时我也没有搞明白,觉得有点不可思议,但结果就是这样,肯定有其道理。后来在微软的官网上找到了这段话。
start the instance of sql server in single-user mode by using either the -m or -f options. any member of the computer's local administrators group can then connect to the instance of sql server as a member of the sysadmin fixed server role.
大概的意思是说当在sql的启动参数中添加了-m或者-f参数时,计算机本地管理员组的任何一个用户都可以sysadmin的身份登录到sql中。相信读者看到这个地方就明白了。这里其实并没有去检验登录的用户是否在sql在存在,只是检查该用户是否为本地计算机的管理组中的用户。
好了,相信后面就不用过多累赘了,只是提醒下读者:修改了sa密码后记得把原来添加在sql启动参数的-m删除掉,然后在重启sql服务。