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

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

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

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

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

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

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

解决方法

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

注意注意

在单用户模式下启动 SQL Server 实例时,请首先停止 SQL Server 代理服务。 否则,SQL Server 代理可能会首先连接,并阻止您作为第二个用户连接。

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

安全说明安全说明

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

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

分步说明

下面的说明介绍了如何连接到 Windows 8 上运行的 SQL Server 2012。 对于早期的 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,然后单击“添加”。 (这是短划线后跟小写字母 m。)

    注意注意

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

  6. 单击“确定”,在显示重新启动的消息后右键单击您的服务器名称,然后单击“重新启动”。

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

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

    注意注意

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

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

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

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

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

      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,然后单击“删除”。

    注意注意

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

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

现在您应能与以下帐户之一正常连接:它们是 sysadmin 固定服务器角色的成员。

请参阅

概念

在单用户模式下启动 SQL Server

数据库引擎服务启动选项