如何重置sa密码?


22

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

我的计划是简单地登录服务器,通过Windows身份验证进行连接,并重置sa以使用新密码。由于我无法通过Windows身份验证进行连接,因此无法正常工作。

我还能如何重设sa密码?


找到了答案。我无法以域管理员身份登录,但是使用本地管理员可以正常工作。
丹尼尔·威廉姆斯

您是说本地计算机“管理员”组的成员能够执行此操作吗?为了后代,您采取了哪些确切步骤?
p.campbell 2011年

该帐户是本地管理员帐户本身。此帐户和我的域帐户一样,是本地Adminsitrators组的一部分。但是,只有本地Administrator帐户才能使用Windows身份验证登录到Sql Server。希望对您有所帮助。
丹尼尔·威廉姆斯

以单用户模式启动实例还将允许属于本地Administrator组的任何本地帐户访问该实例。编辑:链接@ user1419指出了这一点。
肖恩·梅尔顿

Answers:


10

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

步骤总结如下:

  1. 从“开始”菜单>程序> Microsoft SQL Server 20xx>配置工具>与已安装的SQL Server的最新版本相关的位置打开SQL Server Configuration Manager(例如,如果已安装2005和2012,请使用2012版本)。没有开始菜单?在Windows 8的“开始”屏幕上,开始键入SQL Server Con ...,直到出现为止。
  2. 右键单击SQL Server Services中的实例,然后选择“停止”,以停止需要恢复的SQL Server实例。
  3. 右键单击刚停止的实例,单击“属性”,然后在“高级”选项卡的“属性”文本框中,在“启动参数”选项的列表末尾添加“; –m”(在较新的版本中,您可以可以直接转到“启动参数”选项卡,键入“ -m”并单击“添加”,而不必担心语法,分号或其他任何东西)。
  4. 单击“确定”按钮,然后重新启动SQL Server实例
  5. SQL Server实例以单用户模式启动后,Windows管理员帐户便可以使用Windows身份验证使用sqlcmd实用程序连接到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身份添加本地帐户)。


9

您将执行的操作将取决于您的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"

这将作为连接,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服务正在运行,请停止它,然后挂起所有可能依赖该服务的维护计划或第三方备份软件。
  2. 打开regedit.exe并更改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath指向的值SQLCMD.exe,这将是in 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];"
  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安装,请不要让他们成为管理员。


这种方法还能使我启用SA帐户吗?我一直处于禁用SA帐户的位置,并且拥有一个具有Public角色的AD组。另外,列出您的方法,我是否可以执行这些步骤而无需删除实例?我问是因为我的服务器现在处于生产环境中。
肖恩·帕金斯

1
@Sean是的,您应该能够重新启用sa和/或创建另一个SQL身份验证帐户,或专门将AD用户(而不是组!)添加到更高级别的角色。这些都不要求重新启动SQL Server(唯一需要这样做的情况是在混合身份验证和仅Windows之间进行更改)。
亚伦·伯特兰

尝试描述您的过程时,出现以下错误。我还确保对列出的唯一帐户也做了截图。SQL 2012中是否存在不允许该方法的更改?我当前的版本是11.0.3128。此外,我进行哪种类型的更改都没有关系,我将得到一些错误说明我没有权限的变化。最后一件事情,我怀疑是否会有所不同,但是我以管理员权限打开了PowerShell,执行了cmd.exe,然后执行psexec -i -s“ C:\ ...... smss.exe”![帐户创建错误] (i.stack.imgur.com/ITOja.p
肖恩·珀金斯

所附图片目前未显示任何内容,但只有“ SA”和“ NT AUTHORITY \ SYSTEM”作为列出的帐户。我收到的错误消息是“用户没有执行此操作的权限。(Microsoft SQL Server,错误:15247)”
Sean Perkins 2014年

@Sean PowerShell吗?PSExec与PowerShell无关。您是计算机的本地管理员吗?你确定吗?
亚伦·伯特兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.