怎么重置sa密码?

Dan*_*ams 23 security sql-server-2000

我在一台机器上丢失了sa密码,当我直接使用admin组中的帐户登录机器时,SQL Server Management Studio将不允许我使用Windows身份验证登录。

我的计划是简单地登录服务器,通过 Windows 身份验证连接,然后重置 sa 以使用新密码。由于我无法通过 Windows 身份验证连接,这将不起作用。

我还可以如何重置 sa 密码?

小智 10

您可以按照以下链接中提到的步骤重置 SA 密码:

步骤总结如下:

  1. 从开始菜单 > 程序 > Microsoft SQL Server 20xx > 配置工具 > 与您安装的最新版本的 SQL Server 相关(例如,如果您安装了 2005 和 2012,请使用 2012 版本)打开 SQL Server 配置管理器。没有开始菜单?在 Windows 8 的开始屏幕上,开始键入 SQL Server Con... 直到它出现。
  2. 通过右键单击 SQL Server 服务中的实例并选择“停止”来停止需要恢复的 SQL Server 实例
  3. 右键单击刚刚停止的实例,单击“属性”,然后在“高级”选项卡中的“属性”文本框中将“;-m”添加到“启动参数”选项中的列表末尾(在较新的版本中,您可以直接转到“启动参数”选项卡,键入“-m”并单击“添加”,而无需担心语法、分号或其他任何内容)。
  4. 单击“确定”按钮,并重新启动 SQL Server 实例
  5. 在 SQL Server 实例以单用户模式启动后,Windows 管理员帐户可以使用 sqlcmd 实用程序使用 Windows 身份验证连接到 SQL Server。您可以使用 Transact-SQL 命令(例如“sp_addsrvrolemember”)将现有登录(或新创建的登录)添加到 sysadmin 服务器角色。

以下示例将“CONTOSO”域中的帐户“Buck”添加到 sysadmin 角色:

EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';

恢复系统管理员访问权限后,使用配置管理器从启动参数中删除“;-m”并再次重新启动 SQL Server 实例。

注意:确保“;”之间没有空格 和“-m”,注册表参数解析器对此类拼写错误很敏感。您应该会在 SQL Server ERRORLOG 文件中看到一个条目,上面写着“SQL Server 以单用户模式启动”。


其他资源:

最终,您始终可以将数据库文件复制到另一个实例,甚至可以重新安装 SQL Server(在此过程中添加一个本地帐户作为 sysadmin)。


Aar*_*and 10

您所做的将取决于您的 SQL Server 版本,以及您是否有能力关闭 SQL Server 服务以建立新的凭据。这里的前两种方法不需要重启实例:


对于 SQL Server 2005、2008 和 2008 R2 实例

您可以使用该NT AUTHORITY\SYSTEM帐户(或其他后门方法)进行连接。这里的一些答案中有一些细节:

我在MSSQLTips.com上也有解决这个问题的提示:

本质上,您从 Microsoft下载PSExec,然后在安装后使用它来启动 Management Studio:

PsExec -s -i "C:\...\Ssms.exe"
Run Code Online (Sandbox Code Playgroud)

这将连接为NT AUTHORITY\SYSTEM并允许您在对象资源管理器中执行操作,例如:

  • 将实例更改为 SQL Server 和 Windows 身份验证模式- 右键单击​​服务器名称,点击属性,如果当前仅设置为 Windows,则更改单选按钮:

    在此处输入图片说明

  • 设置sa帐户的密码- 展开安全,展开登录,右键单击sa并点击属性,在结果对话框中将有两个密码输入字段:

    在此处输入图片说明

  • 添加您自己的登录名sysadmin- 右键单击​​登录名,新建登录名...输入您的登录名(在表单中DOMAIN\username),然后移至服务器角色选项卡并选中该sysadmin框并单击确定:

    在此处输入图片说明

  • (或者,如果您的登录名已列出,请右键单击“属性”,并确保sysadmin在“服务器角色”下选中)


对于 SQL Server 2012 和更新的实例

从 SQL Server 2012 开始,NT Authority\SYSTEM默认情况下不再授予 SQL Server 权限。因此,Argenis Fernandez 详细介绍了在这些较新版本中执行此操作的另一种方法:

  1. 如果 SQL VSS Writer 服务正在运行,请停止它,并暂停所有可能依赖它的维护计划或第 3 方备份软件。

  2. 打开regedit.exe并更改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePathto的值指向SQLCMD.exe,它将在C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn. 编辑后,注册表值应如下所示(抱歉滚动):

    "C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 尝试再次启动 SQL VSS Writer 服务(您将收到错误消息;没关系)。

  4. 您现在应该可以sysadmin使用YourDomain\YourUserName. 因此,停止 SQL VSS Writer 服务,修复注册表,然后重新启动该服务(如果您需要它运行,或者它在您启动之前正在运行)。

我在第二个技巧中更详细地介绍了这一点:

虽然当我写那个提示时,我使用了一种更麻烦的方法来制作副本SQLCMD.exe和替换sqlwriter.exe-SQLCMD.exe直接指向服务要容易得多。


如果您有能力关闭 SQL Server 服务

Microsoft 提供了一条官方支持的路径,需要在单用户模式下重新启动实例:

dbatools.io 中还有一个函数,用于管理 SQL Server 的 Powershell 解决方案,称为Reset-DbaAdmin


安全不是这里的主要问题

我看到很多人呼吁微软“修复”这些所谓的“漏洞”。这些是恢复对您合法拥有的 SQL Server 实例的访问权限的有效方法。它们都需要在 SQL Server 所在的物理主机上提升权限;正如我对几个人所说的那样,如果您不希望开发人员弄乱 SQL Server 安装,请不要让他们成为管理员。