SQLSERVER误删除了Windows登陆用户验证方式使用Windows身份验证的解决方法

SQLSERVER误删Windows登陆用户验证方式使用Windows身份验证的解决方法

今天看到这篇文章:没有了SA密码,没法Windows集成身份登陆,DBA怎么办?html

想起来以前着急哥问个人一个问题,一个DBA删除了Windows登陆用户,并且SQLSERVER服务器的验证方式是Windows身份验证sql

怎麽办??shell

我当时给他的答复是:重装系统数据库master数据库

今天看到这篇文章没有了SA密码,没法Windows集成身份登陆,DBA怎么办?,有思路了服务器


假设咱们遇到很糟糕的状况ide

sa被禁用,服务器身份验证为Windows身份验证模式,Windows登陆用户被删,没有其余sysadmin角色的登陆用户sqlserver

步骤一网站

停掉SQLSERVER:在命令行 net stop mssqlserverspa

步骤二命令行

转到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 GO
10 EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
11 GO
12 
13 --建立登陆名
14 CREATE LOGIN [计算机名\Administrator] FROM WINDOWS;
15 GO
16 
17 --赋予登陆名的权限为sysadmin
18 USE master
19 GO
20 EXEC [sys].[sp_addsrvrolemember] @loginame = '计算机名\Administrator', -- sysname
21     @rolename = sysadmin -- sysname
22 
23 --关闭xp_cmdshell功能
24 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35)
25     @configvalue = 0 -- int
26 RECONFIGURE WITH override

这时候身份验证方式已经改成混合验证方式

 

步骤六:关掉SQLSERVER,再从新启动

打开SQLSERVER配置管理器,启动SQLSERVER

步骤七:登陆SQLSERVER

回到SSMS,能够看到这时候恢复正常了


总结

感谢博客园里的i6first,以前一直觉得没法子了,想不到他想到了用单用户模式启动的方法来进入SQLSERVER

 

参考文章:GRANT 服务器权限 (Transact-SQL)

 

若有不对的地方,欢迎你们拍砖o(∩_∩)o 

 

2014-2-26补充:

在进行上面操做以前,SQL BROSWER服务必定要开启,不然在进行步骤四的时候会提示数据库处于单用户模式,不能登陆!!

 

2014-11-20补充:

今晚某童鞋找到我,说他禁用了Windows登陆用户和sa,无办法再登陆SQLSERVER,服务器上跑着百万PV的网站

停机的话电话就会打爆,他使用了本文的方法,惋惜不奏效

详细讲解:

若是禁用了sa和禁用了Windows登陆用户(注意:是禁用不是删除)

那么使用上述方法的时候,在启动SQLSERVER的时候会报错:Windows账户 计算机名/Administrator 已被禁用

解决方法:在Windows上新建一个 Administrator组的Windows账户 好比 test账户,隶属于Administrator组

而后切换Windows登陆用户到test ,使用上面的方法,用“管理员身份运行” CMD,以/m /f 启动sqlserver

用sqlcmd 进入命令行就能够了

原理:sqlserver里的Windows账户是跟Windows的账户用SID绑定映射的

SQL首先使用你当前登陆的Windows账户来登陆sqlserver,这样就致使了当Windows账户被禁用的话他不会使用sa来登陆(也就是其余拥有sysadmin权限的

登陆用户来登陆,不考虑SQL登陆验证)

我这里的方法是切换到别的Windows账户下,这样SQL就找不到当前Windows账户跟SQL里面的登陆用户的SID登陆映射

SQLSERVER就会使用sa来登陆

相关文章
相关标签/搜索