zoukankan      html  css  js  c++  java
  • SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法

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

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

    想起来之前着急哥问我的一个问题,一个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 GO
    10 EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServer', 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来登录

  • 相关阅读:
    myBatis之事务管理
    关于Spring事务回滚的问题
    mysql中的多行查询结果合并成一个
    mybatis传递参数到mapping.xml
    EasyUI 中 DataGrid 控件 列 如何绑定对象中的属性
    写给java开发的运维笔记
    SpringMVC学习系列(11) 之 表单标签
    eclipse 安装svn插件
    linux(centos)搭建SVN服务器
    JavaServer Faces 2.0 can not be installed解决方案
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3513560.html
Copyright © 2011-2022 走看看