在系统管理员被锁定时连接到 SQL Server

本主题介绍如何以系统管理员身份重新获得对 SQL Server 数据库引擎的访问权限。 由于以下原因之一,系统管理员可能会失去对 SQL Server 实例的访问权限:

  • 作为 sysadmin 固定服务器角色成员的所有登录名都已经被误删除。

  • 作为 sysadmin 固定服务器角色成员的所有 Windows 组都已经被误删除。

  • 作为 sysadmin 固定服务器角色成员的登录名用于已经离开公司或者无法找到的个人。

  • sa 帐户被禁用或者没有人知道密码。

重新获得访问权限的一种方法是重新安装SQL Server并将所有数据库附加到新实例。 这种解决方案很耗时,并且若要恢复登录名,可能还需要从备份中还原 master 数据库。 如果 master 数据库的备份较旧,则它可能未包含所有信息。 如果 master 数据库的备份较新,则它可能与前一个实例具有同样的登录名;因此管理员仍将被锁定。

解决方法

使用 -m-f 选项在单用户模式下启动 SQL Server 实例。 计算机的本地管理员组的任何成员都可以随后作为“sysadmin”固定服务器角色的成员连接到 SQL Server 实例。

注意

在单用户模式下启动 SQL Server 实例时,首先停止SQL Server 代理服务。 否则,SQL Server 代理可能会先连接,并阻止你以第二个用户身份进行连接。

sqlcmd 或 SQL Server Management Studio 中使用 -m 选项时,可以将连接限制到指定的客户端应用程序。 例如, -m“sqlcmd” 将连接限制为单个连接,并且该连接必须将自身标识为 sqlcmd 客户端程序。 当您正在单用户模式下启动 SQL Server 并且未知的客户端应用程序正在占用这个唯一的可用连接时,使用此选项。 若要通过 Management Studio中的查询编辑器进行连接,请使用 -m"Microsoft SQL Server Management Studio - Query"

重要

不要将此选项作为安全功能使用。 客户端应用程序提供客户端应用程序名称,并且提供假名称来作为连接字符串的一部分。

有关如何在单用户模式下启动SQL Server的分步说明,请参阅配置服务器启动选项 (SQL Server 配置管理器)

分步说明

以下说明介绍了连接到在 Windows 8 或更高版本上运行的 SQL Server 2014 的过程。 对于早期的 SQL Server 或 Windows 版本略有调整。 这些说明必须在以本地管理员组成员身份登录到 Windows 时执行,并且假定计算机上安装了SQL Server Management Studio。

  1. 从“开始”页开始SQL Server Management Studio。 在“视图” 菜单上,选择“已注册的服务器” 。 (如果尚未注册你的服务器,请右键单击“本地服务器组”,指向“任务”,然后单击“注册本地服务器”。

  2. 在“已注册的服务器”区域中,右键单击你的服务器,然后单击“SQL Server 配置管理器”。 这应要求以管理员身份运行的权限,然后打开配置管理器程序。

  3. 关闭 Management Studio。

  4. 在 SQL Server 配置管理器的左窗格中,选择“SQL Server 服务” 。 在右窗格中,查找 SQL Server 实例。 (SQL Server 的默认实例包括在计算机名称后的 (MSSQLSERVER) 。 命名实例显示为大写,名称与在“已注册的服务器”中的名称相同。) 右键单击 SQL Server 的实例,然后单击“属性”。

  5. 在“启动参数”选项卡上的“指定启动参数”框中,键入 -m ,然后单击 。Add (这是短划线后跟小写字母 m。)

    注意

    对于某些早期版本的 SQL Server ,没有“启动参数” 选项卡。在这种情况下,在“高级”选项卡上,双击“启动参数” 。 参数在非常小的窗口中打开。 请注意不要更改任何现有参数。 在最后,添加新参数 ;-m,然后单击 OK。 (这是一个分号,后跟短划线和小写字母 m。)

  6. 单击 OK,然后在要重启的消息后,右键单击服务器名称,然后单击“ 重启”。

  7. SQL Server重启后,服务器将处于单用户模式。 请确保 SQL Server 代理未在运行。 如果启动,它将占用您唯一的连接。

  8. 在 Windows 8 开始屏幕上,右键单击 Management Studio 的图标。 在屏幕的底部,选择““以管理员身份运行” 。 (这会将您的管理员凭据传递到 SSMS。)

    注意

    对于 Windows 的早期版本,“以管理员身份运行”选项显示为子菜单。

    在某些配置中,SSMS 将尝试进行多个连接。 多个连接将失败,因为 SQL Server 处于单用户模式。 可以选择执行以下操作之一。 执行下列操作之一:

    1. 使用 Windows 身份验证(包括您的管理员凭据)与对象资源管理器连接。 依次展开“安全性”和“登录名”,然后双击你自己的登录名 。 在“服务器角色”页上,选择 ,sysadmin然后单击 。OK

    2. 使用 Windows 身份验证(包括您的管理员凭据)与“查询窗口”连接,而非与对象资源管理器连接。 (仅当未使用 对象资源管理器.) 执行如下代码以添加作为固定服务器角色成员sysadmin的新 Windows 身份验证登录名时,才能以这种方式进行连接。 以下示例添加名为 CONTOSO\PatK的域用户。

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;  
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];  
      
    3. 如果 SQL Server 正在混合身份验证模式下运行,请使用 Windows 身份验证(包括您的管理员凭据)与“查询窗口”连接。 执行如下代码,以创建新的SQL Server身份验证登录名,该登录名是固定服务器角色的成员sysadmin

      CREATE LOGIN TempLogin WITH PASSWORD = '************';  
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;  
      

      警告

      使用强密码替换 ************。

    4. 如果SQL Server在混合身份验证模式下运行,并且你想要重置帐户的密码sa,请使用 Windows 身份验证 ((包括管理员凭据) )连接到查询窗口。 使用以下语法更改帐户的密码 sa

      ALTER LOGIN sa WITH PASSWORD = '************';  
      

      警告

      使用强密码替换 ************。

  9. 以下步骤现在SQL Server更改回多用户模式。 关闭 SSMS。

  10. 在 SQL Server 配置管理器的左窗格中,选择“SQL Server 服务” 。 在右侧窗格中,右键单击 SQL Server 的实例,然后单击“属性”。

  11. 在“启动参数”选项卡上的“现有参数”框中,选择-m,然后单击 。Remove

    注意

    对于某些早期版本的 SQL Server ,没有“启动参数” 选项卡。在这种情况下,在“高级”选项卡上,双击“启动参数” 。 参数在非常小的窗口中打开。 ;-m删除前面添加的 ,然后单击 。OK

  12. 右键单击你的服务器名称,然后单击“重启”。

现在,你应该能够正常连接其中一个帐户,该帐户现在是固定服务器角色的成员 sysadmin

另请参阅

在单用户模式下启动 SQL Server
数据库引擎服务启动选项