想起之前焦虑哥问我的一个问题。某DBA删除了Windows登录用户,SQLSERVER服务器的认证方式为Windows认证。
我们做什么呢?
我当时给他的答案是:重装系统数据库主。
今天看到这篇文章。没有SA密码,我无法以Windows集成身份登录。DBA应该怎么做?有想法。
假设我们的处境很糟糕。
Sa被禁用,服务器身份验证处于Windows身份验证模式,Windows登录用户被删除,并且没有其他具有sysadmin角色的登录用户。
第一步:
停掉SQLSERVER:在命令行net stop mssqlserver
第二步:
转到SQLSERVER的安装目录。
然后添加/m /f参数。
步骤3:为单用户模式启动SQLSERVER。
第四步:打开SSMS。
这时候一定不要马上连接。你需要点击取消,然后点击左上角的新建查询。此步骤与DAC(专用管理员连接)相同。
你会发现,用Windows登录的用户,此时也可以登录。
步骤5:执行下面的SQL脚本。
1 - 打开xp_cmdshell功能2EXEC[sys].[sp _ configure]@ configname=' XP _ cmdshell '-varchar(35)3 @ config value=1-int 4 reconfigurewithoverride 567-修改注册表,
此时,身份验证模式已更改为混合身份验证模式。
步骤6:关闭SQLSERVER并重新启动它。
打开SQLSERVER配置管理器并启动SQLSERVER。
步骤七:登录SQLSERVER
回到SSMS,可以看到这时候恢复正常了
总结
感谢i6first大侠,之前一直以为无法子了,想不到他想到了用单用户模式启动的方法来进入SQLSERVER。
没有了SA密码,无法Windows集成身份登录,DBA怎么办?
一同事反馈SQL无法正常登录了,以前都是通过windows集成身份验证登录进去的(sa密码早忘记了),今天就改了服务器的机器名,现在无论如何都登录不进去。
SQL登录时如果采用windows集成身份验证,登录框将会以“机器名\当前系统用户名”的格式显示登录名,而且登录名和密码都是灰色的,不允许用户输入。
了解到同事刚刚修改了服务器的机器名,因此在SQL的登陆框中显示“新机器名\当前系统用户名”。要知道windows集成身份验证能登录的原因是在SQL的登录名中已经包括了该用户名,
原来的用户名在SQL安装的时候已经记录到了SQL中,如果机器名变更了,“新机器名\当前系统用户名”肯定无法正常登录。
网上看到有人说可以采用OSQLS 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-mor-foptions. 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