丢失了 SQL Server 的 sa 密码-没有 Windows 身份验证-在命令行创建的新角色不会出现

丢失了 SQL Server 的 sa 密码-没有 Windows 身份验证-在命令行创建的新角色不会出现

我们的支持人员更改了 SQL Server DB 的“sa”密码。他们关闭了 Windows 身份验证。然后,负责这项工作的人离开了。

因此,我们有一个未备份的生产数据库,我们无法访问它。其中有超过 10 年的生产数据。

我尝试了从 SQLCmd 命令行添加新角色的常用技巧。

  1. 以单用户模式重新启动 MSSQLSERVER

  2. 从 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 
    
  3. 正常重启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

我建议您按照下面提到的步骤重新获得对数据的访问权限。

  1. 将 SQL Server 实例设置回混合模式身份验证。

您可以通过停止 SQL Server 实例并调整注册表项来执行此操作。当表单 DBA 更改注册表时,SSMS 所做的就是更改此注册表。更改此注册表项以将其恢复没有问题,只需确保实例未运行即可。

注册表项路径应类似于以下内容: 。您应该发现,对于 Windows 身份验证,此值现在设置为 1。对于混合模式,HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQLSERVER\MSSQLServer\LoginMode将此值更改为 a 。2

  1. 从名为的 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 密码?

相关内容