在 SA 和 Windows 等账户都被禁用的情况下如何登录?

所有 sysadmin 账户都不可用,或者忘记了或者被禁用的导致无法登录,这个偶尔还是能见到的。

这个确实让人着急, 为了这么点事重装SQL Server 还是不值。

那如何处理呢?


下面以 Win10+SQL Server2017 为例来示范操作。

------------------------------------------------ 分割线 ------------------------------------------------

先模拟,禁用所有账户:

注:影响比较大,请不要在生产环境操作。想直接看解决方案的请跳过这一步。

--禁用所有账户
DECLARE @sql NVARCHAR(MAX)
SELECT @sql=ISNULL(@sql,'')+'alter login ['+s.name+'] disable;
' FROM sys.syslogins AS s WHERE s.name NOT LIKE '##%##'
PRINT @sql
EXEC (@sql)

做完这一步, 这个SQL Server暂时算是废了, 关闭当前的查询窗口, 再也无法连接了。

------------------------------------------------ 分割线 ------------------------------------------------


解决方案:

一、创建一个新的Windows 用户帐户, 名称为 dba, 类型为管理员。这一步就不赘述了。

二、以 dba 登录Windows;

三、进入服务窗口, 停止 SQL Server2017 服务;


四、找到命令提示符,右键"以管理员身份运行" 。


五、net start 服务名 /m  , 进入单用户模式。服务名可以在服务上右键获取, 如下图:

六、sqlcmd -S  .\实例名 -A, 以DAC方式进入sqlcmd。实例名也可以在服务上右键获取, 如下图:

七、执行SQL, 创建一个新的 sysadmin 权限的SQL账户, 脚本如下:

USE [master]
GO
CREATE LOGIN [admin] WITH PASSWORD=N'admin', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [admin]
GO


八、重启SQL Server服务(此时就不再要是单用户了).


到此为止,你可以用SQL Server的新账户admin登录进入了。进去之后,将其它账户改为启用即可。

当然, 整个过程中, 最为关键的几点:

五、单用户启动;

六、DAC进入sqlcmd.

至于其它,你可以灵活处理,比如已经有管理用户,没有禁用过但也没有权限也可以不新建Windows帐户;如果你想将  sa 改为启用,再将sa密码改一下而不创建 admin 的 SQL账户也行。

-------------------------------------

后记:

某次用这个方法能创建新SQL账号,但新SQL账号 admin 却登录不了, 后面近不得已,新创建 Windows账号, 并改为 sysadmin .

USE [master]
GO
CREATE LOGIN [WIN-xxx\userName] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
EXEC master..sp_addsrvrolemember @loginame = N'WIN-xxx\userName', @rolename = N'sysadmin'
GO

用Windows账号登录能连接了, 再看 admin , 无论怎么修改也登录不了, 真奇怪。再看错误日志, 


不知谁居然没启用这个, 图形界面当然简单:


对应脚本:

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
GO

也就是说, 上面的方法如果不成功, 在第 7 步的脚本中增加这个启用 SQL 账号的脚本即可。

注:身份验证修改后必须重启服务才能生效。


参考:

msdn:在单用户模式下启动 SQL Server

msdn:sqlcmd - 使用实用工具


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值