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


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

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

那如何处理呢?

模拟场景

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

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

禁用所有账户:

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

做完这一步, 这个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
GarsonZhang www.yesdotnet.com

八、重启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
GarsonZhang www.yesdotnet.com

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

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

对应脚本:

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
GO
GarsonZhang www.yesdotnet.com

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

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

 

参考:

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

 

msdn:sqlcmd - 使用实用工具

在 SA 和 Windows 等账户都被禁用的情况下如何登录?_我想我是海 冬天的大海 心情随风轻摆-CSDN博客

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:SQL Server 数据库安全之角色
下一篇:SQL Server中常用全局变量介绍
评论列表

发表评论

评论内容
昵称:
关联文章

SA Windows 账户禁用情况如何登录
服务器安全:SQLServer对外网开放后,人尝试登录sa账户
selenium爬虫检测到 该如何
Python Selenium 爬虫如何隐藏Headles-Chrome不检测出来 避免检测
WindowsGit多账号配置,同一电脑多个ssh-key管理
Python Selenium 前端如何检测Chrome-Headless不爬虫虐
支付宝支付报错:4004,卖家不设置收款账户列表之中
WPF DataGrid 如何选中行带到视野中
element-ui el-row中有多个el-col时候,某些情况el-col显示错位
【C#】C#中使用GDAL3(三):Windows编译插件驱动
使用.NET 6开发TodoList应用(10)——实现DELETE请求以及HTTP请求幂
WPF 引用第三方库控件设计器加上设计时数据属性
windows配置安卓adb工具
[实操] WindowsGit多账号SSH配置
.Net 高性能分表分库组件-连接模式原理
.NET如何拦截鼠标、键盘消息?Win32NET来帮你
javascript中letvar区别
服务器ntlmssp攻击防御措施,windows server大量审核失败问题
探索 dotnet core 为何在 Windows7 系统需要补丁原因
【gitblit复制URL】 修改URL复制方式Flash插件浏览器禁用解决办法

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码