我在计算机上丢失了sa密码,当我直接使用admin组中的帐户登录计算机时,SQL Server Management Studio将不允许我使用Windows身份验证登录。
我的计划是简单地登录服务器,通过Windows身份验证进行连接,并重置sa以使用新密码。由于我无法通过Windows身份验证进行连接,因此无法正常工作。
我还能如何重设sa密码?
我在计算机上丢失了sa密码,当我直接使用admin组中的帐户登录计算机时,SQL Server Management Studio将不允许我使用Windows身份验证登录。
我的计划是简单地登录服务器,通过Windows身份验证进行连接,并重置sa以使用新密码。由于我无法通过Windows身份验证进行连接,因此无法正常工作。
我还能如何重设sa密码?
Answers:
您可以按照以下链接中提到的步骤重置SA密码:
步骤总结如下:
- 从“开始”菜单>程序> Microsoft SQL Server 20xx>配置工具>与已安装的SQL Server的最新版本相关的位置打开SQL Server Configuration Manager(例如,如果已安装2005和2012,请使用2012版本)。没有开始菜单?在Windows 8的“开始”屏幕上,开始键入SQL Server Con ...,直到出现为止。
- 右键单击SQL Server Services中的实例,然后选择“停止”,以停止需要恢复的SQL Server实例。
- 右键单击刚停止的实例,单击“属性”,然后在“高级”选项卡的“属性”文本框中,在“启动参数”选项的列表末尾添加“; –m”(在较新的版本中,您可以可以直接转到“启动参数”选项卡,键入“ -m”并单击“添加”,而不必担心语法,分号或其他任何东西)。
- 单击“确定”按钮,然后重新启动SQL Server实例
- 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身份添加本地帐户)。
您将执行的操作将取决于您的SQL Server版本以及是否有能力关闭SQL Server服务以建立新的凭据。这里的前两种方法不需要重新启动实例:
您可以使用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开始,NT Authority\SYSTEM
默认情况下不再授予对SQL Server的权限。因此,在这些较新版本中执行此操作的另一种方法已由Argenis Fernandez详细介绍:
打开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];"
尝试再次启动SQL VSS Writer服务(您会得到一个错误;可以)。
现在,您应该可以sysadmin
使用进行连接YourDomain\YourUserName
。因此,请停止SQL VSS Writer服务,修复注册表,然后重新启动服务(如果您需要运行该服务,或者在启动此服务之前已运行该服务)。
我在第二个技巧中详细介绍了这一点:
尽管当我写该技巧时,我使用了一种繁琐的方法来复制SQLCMD.exe
和替换它sqlwriter.exe
- SQLCMD.exe
直接将服务指向更容易。
Microsoft提供了一个官方支持的路径,该路径要求以单用户模式重新启动实例:
dbatools.io中还有一个功能,该功能是用于管理SQL Server的Powershell解决方案,名为Reset-DbaAdmin
:
我看到很多人呼吁微软“修复”这些所谓的“漏洞”。这些是恢复对您应有的SQL Server实例的访问的有效方法。它们都要求在SQL Server所在的物理主机上具有提升的特权。正如我对几个人所说的那样,如果您不希望开发人员搞砸SQL Server安装,请不要让他们成为管理员。