我们的支持人员更改了 SQL Server DB 的“sa”密码。他们关闭了 Windows 身份验证。然后,负责这项工作的人离开了。
因此,我们有一个未备份的生产数据库,我们无法访问它。其中有超过 10 年的生产数据。
我尝试了从 SQLCmd 命令行添加新角色的常用技巧。
以单用户模式重新启动 MSSQLSERVER
从 MS-DOS 命令行发出“MSSql -S 127.0.0.1\MSSQLSERVER”,然后在命令行中:
USE [master] GO CREATE LOGIN [BUILTIN\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO EXEC master..sp_addsrvrolemember @loginame = 'BUILTIN\Administrators', @rolename = 'sysadmin' GO
正常重启MSSQLSERVER
但是在 SQL Management Studio 中却看不到新用户和新角色分配。 用户
如果我转到 master.sys.server_principals,我看不到新的登录信息。 server_principals 表
如果我尝试将角色添加到 Management Studio 中的现有用户,它会告诉我我没有权限。我以 Windows 管理员身份登录,但不是以“sa”身份登录(因为这是我尝试恢复或重置的密码): 没有权限
我返回 MSSql 命令行并重新发出上述命令,它说主体已经存在。 主体存在
机器上没有其他 SQL 实例。我们的网络上没有其他服务器。我没有在任何地方看到错误消息。我在 Windows Server 2012 R2 上使用完全管理员权限执行上述操作。
为什么 MSSql 命令行创建登录名并分配角色,报告一切正常,但没有错误消息,SQL Server Management Studio 中也看不到任何内容。我已重新启动 MSSQLSERVER。我已重新启动 Management Studio。
我觉得我快疯了。有人知道该怎么办吗?
答案1
我建议您按照下面提到的步骤重新获得对数据的访问权限。
- 将 SQL Server 实例设置回混合模式身份验证。
您可以通过停止 SQL Server 实例并调整注册表项来执行此操作。当表单 DBA 更改注册表时,SSMS 所做的就是更改此注册表。更改此注册表项以将其恢复没有问题,只需确保实例未运行即可。
注册表项路径应类似于以下内容: 。您应该发现,对于 Windows 身份验证,此值现在设置为 1。对于混合模式,HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQLSERVER\MSSQLServer\LoginMode
将此值更改为 a 。2
- 从名为的 PowerShell 库中在服务器或客户端计算机上安装 PowerShell 模块数据库工具。
安装模块后,您可以使用以下命令:重置DbaAdmin。这将提示您重置“sa”帐户并让您重新获得对实例的访问权限。
#Install from the gallery
Install-Module dbatools
# Import module and run command
Import-Module dbatools
Reset-DbaAdmin -SqlInstance YourServerName
答案2
我这样做过几次,效果都很好。您是否尝试过在服务器处于单独使用模式时重置 sa 密码?