在 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)
做完这一步, 这个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 账号的脚本即可。
注:身份验证修改后必须重启服务才能生效。
参考:
在 SA 和 Windows 等账户都被禁用的情况下如何登录?_我想我是海 冬天的大海 心情随风轻摆-CSDN博客