忘记SQLSERVER管理员密码的补救办法

摘抄自jimshu

  如果不慎遗忘 SQL Server 的管理员密码(即:遗忘了所有的管理员密码),或者需要强行添加另一个管理员帐号,这时候需要一种补救措施。

  SQL Server 提供了单用户模式(也称为维护模式),便于用户更改服务器配置选项或恢复受损的系统数据库。在单用户模式下启动 SQL Server,可以使本机Administrators 组的任何成员作为 sysadmin服务器角色的成员连接到 SQL Server 数据库引擎(实例)。

  注意:在单用户模式启动之前,请停止 SQL Server Agent 服务,防止 SQL Server Agent 抢占此唯一的连接。

 

一、启用单用户模式

1. 打开SSCM(SQL Server配置管理器)

2. 停止SQL Server 引擎服务(实例)

3. 修改该引擎服务的属性

wKioL1Q7Z-zB1lfGAAHlB-mrhOU674.jpg

 

4. 添加单用户模式启动参数

(1) 适用于SQL Server 2012之前的旧版本

wKiom1Q7fYPBiRK1AAJiHAPzXBw725.jpg 

 

(2) 适用于SQL Server 2012及后陆版本

wKioL1Q7aHThamIJAAFe6_uwiMs725.jpg

 

5. 完成上述修改后,启动数据库引擎服务

6. 检查启动日志,确认已进入了单用户模式

2014-10-13 13:55:08.95 spid7s      SQL Server started in single-user mode. This an informational message only. No user action is required.

 注意:启动日志文件的位置及文件名由“启动参数”的“-e”参数指定。例如:

C:UsersAdministrator> notepad  "C:Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2MSSQLLogERRORLOG"


 

二、越权添加或修改管理员帐户

1. 查看数据库引擎服务的列表(确保下一步操作时不会敲错实例的名称)

C:UsersAdministrator> sqlcmd -L

服务器:
    PC2014
    PC2014SQL2008R2
    PC2014SQL2012

 

2. 打开命令行窗口,使用 sqlcmd 连接到数据库 

C:UsersAdministrator> sqlcmd -S PC2014SQL2008R2

 

 

3. 执行以下其中一条T-SQL语句,添加或修改帐号

(1)添加本地或域帐户到数据库管理员组

1> EXEC sp_addsrvrolemember 'PC2014jim', 'sysadmin';
2> GO

 

(2)添加内置帐户到数据库管理员组

1> EXEC sp_addsrvrolemember 'BUILTINadministrators', 'sysadmin';
2> GO

 

(3)如果遗忘了旧密码,重置密码 (官方不推荐使用sp_password)

1> Alter Login [BUILTINadministrator] with password='newpassword';
2> GO

 

(4)如果还记得旧密码,修改密码

1> Alter Login [sa] with password='newpassword' old_password='oldpassword';
2> GO

 

注意:如果SA帐户被禁用,则

1> Alter Login [sa] ENABLE;
2> GO 


注意:如果服务器身份验证模式仅为“Windows身份验证模式”,那么需要改为“SQL Server和Windows身份验证模式”,才可以使用sa帐户。修改此模式需要修改注册表,注册表项位于:HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server<实例ID>MSSQLServer,将LoginMode改为2即可。

  “实例ID”的命名格式默认为“MSSQL<版本号>.<实例名称>”,例如 “MSSQL12.MSSQLSERVER”。这个设置是在安装SQL Server时指定的,安装向导将使用这个“实例ID”创建对应的文件夹。

wKioL1Q7imajAlrAAAMpYpIY_Wg150.jpg


 

三、启动数据库引擎服务

1. 打开SSCM,修改数据库引擎的属性,将“-m ”参数从启动参数中移除。 

2. 启动数据库引擎服务,以新建或修改过的数据库管理员帐户连接到数据库。

 

 

附注:直接使用命令行启动单用户模式的方法

1. 找到 sqlservr.exe 的路径 

wKiom1Q7gZGjP7v5AAIxWqcEb88147.jpg 


wKiom1Q7garQuCwKAAHZXCVviQU110.jpg 

 

2. 复制 sqlservr.exe 到命令行窗口,添加“-m”参数并运行

例如:

C:UsersAdministrator> "C:Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2MSSQLBinnsqlservr.exe" -sSQL2008R2 -m

启动日志将直接显示在命令行窗口,请检查启动日志,确认已成功启用了单用户模式。

 

:还可以强行指定客户端程序。

(1) -m "sqlcmd" 。指定只有sqlcmd可以连接到SQL Server 实例。 

(2) -m "Microsoft SQL Server Management Studio -Query" 。指定只有SSMS可以连接到SQL Server 实例。


3. 另外打开一个命令行窗口,即可以使用 sqlcmd 执行操作。

4. 如需停止SQL Server 实例,只需要在sqlservr.exe窗口按Ctrl-C(甚至直接关闭sqlservr.exe的窗口),在遇到提问时回答“Y”。

 Do you wish to shutdown SQL Server (Y/N)?

当没有管理员权限时如何管理

 

本人见过很多情景,由于有意无意,把所有具有管理员权限的Windows、SQL 帐号删了,而sa又被禁用或不知道密码时,很多操作都不能进行,解决这种问题的方法可以是重建master库,详见:http://msdn.microsoft.com/zh-cn/library/dd207003.aspx(重新生成系统数据库)。但是这会丢失所有登录信息,除非你有最近的master库备份。并且需要停止SQL Server服务。

还有一种方法,本人实践过:

[plain] view plaincopyprint?

  1. 启用本地帐户:   

  2. 1.先看一下本机的帐户是否具有管理员的权限,如果没有添加上。   

  3. 2.在开始菜单的搜索框中输入 cmd , 右键单击选择以管理员身份运行   

  4. 3.在命令提示符输入 NET STOP MSSQLSERVRE 停止MSSQLSERVER运行(若已经停止则可以不用此方法)   

  5. 4.若3有问题,提示报错,则可以在开始 –>SQL SERVER –> 配置工具 –>SQL SERVER 服务 –> 打开SQL SERVER属性–>高级 –> 启动参数里面加上 -m  

  6. 5.若以上均无问题,则切换到安装路径,即Binn下sqlservr.exe的路径   

  7. 如:cd C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLBinn   

  8. 6.执行 sqlservr.exe,即单用户模式进入了   

  9. 7.再以管理员帐户重新登陆开启一个窗口,输入SQLCMD -A   

  10. 8.输入你要更改的操作命令即可,在此处我需要的是把本机帐户添加   

  11.   如:   

  12. USE master   

  13. GO   

  14. CREATE LOGIN [需要添加的帐号,一般格式是 机器名登录账号名] FROM WINDOWS WITH DEFAULT_DATABASE=[Master]   

  15. GO   

  16. EXEC sp_addsrvrolemember @loginame=N'机器名登录账号名', @rolename=N'sysadmin'   

  17. GO   

  18. 为了避免错误,可以再加一个SQL的帐户以备不时之需, 也可以把sa命令启用  

  19. 9.以上操作完成之后重新启动SQL SERVER服务登陆即可  



 

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 GO10 EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServer', 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

 

参考文章: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来登录

Leave a Reply