导出 SQL Server 登录信息

本文档介绍了如何使用 sp_help_revlogin 存储过程从 Cloud SQL for SQL Server 实例导出 SQL Server 登录名、安全标识符 (SID) 和密码哈希。

在 SQL Server 实例之间迁移数据库或设置数据库同步时,您必须在目标实例上重新创建具有匹配 SID 和密码哈希的用户登录名。这样可确保数据库用户仍映射到其对应的服务器登录名,并保留其权限。

Cloud SQL for SQL Server 在 msdb 数据库中提供了 sp_help_revlogin 存储过程,用于生成用于重新创建用户登录信息的 Transact-SQL (T-SQL) 脚本。

准备工作

所需的角色

如需获得配置数据库标志所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含配置数据库标志所需的 cloudsql.instances.update 权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

数据库权限

确保您有权访问默认的 sqlserver SQL Server 用户角色。

启用数据库标志

如需在 msdb 数据库中安装 sp_help_revlogin 存储过程,请在实例上启用 cloud sql enable sp_help_revlogin 数据库标志。

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 点击修改
  4. 自定义实例部分,展开标志
  5. 点击添加标志
  6. 从可用标志列表中选择 cloud sql enable sp_help_revlogin
  7. 将标志值设置为 on
  8. 点击保存

gcloud CLI

使用 gcloud CLI 启用该标志:

gcloud sql instances patch INSTANCE_NAME \
    --database-flags="cloud sql enable sp_help_revlogin=on"

INSTANCE_NAME 替换为您的 Cloud SQL 实例的名称。

使用受支持的客户端工具进行连接

sp_help_revlogin 存储过程使用 T-SQL PRINT 语句(信息性消息)而非表格结果集(SELECT 语句)输出生成的 CREATE LOGIN 脚本。

您可以使用以下工具之一连接到 Cloud SQL 实例:

  • SQL Server Management Studio (SSMS):连接到实例,执行该过程,然后在消息标签页中查看生成的脚本。或者,您也可以在执行查询之前按 Control+T 将执行输出模式切换为将结果输出为文本
  • Visual Studio Code:使用 MSSQL 扩展程序进行连接,执行该过程,然后在消息标签页中查看生成的脚本。
  • sqlcmd 实用程序:连接到实例并将生成的脚本直接输出到 SQL 文件:

    sqlcmd -S INSTANCE_IP \
        -U USERNAME \
        -P PASSWORD -d msdb \
        -Q "EXEC dbo.sp_help_revlogin" -o output_logins.sql
    

    替换以下内容:

    • INSTANCE_IP:Cloud SQL 实例的 IP 地址。
    • USERNAME:您的管理数据库用户名(例如 sqlserver)。
    • PASSWORD:您的数据库用户密码。

使用 sp_help_revlogin 导出登录信息

连接到 msdb 数据库并运行 sp_help_revlogin 存储过程。

  • 如需导出所有客户登录信息,请执行以下操作:

    EXEC msdb.dbo.sp_help_revlogin;
    
  • 如需导出特定登录信息,请执行以下操作:

    EXEC msdb.dbo.sp_help_revlogin
        @login_name = 'LOGIN_NAME';
    

    LOGIN_NAME 替换为要导出的登录名的名称。

在目标实例上重新创建登录名

  1. 从查询输出中复制生成的 CREATE LOGIN 语句。
  2. 连接到目标 SQL Server 实例。
  3. 在查询窗口中或使用 sqlcmd 执行生成的语句。

生成的语句会在目标实例上创建具有原始 SID、默认数据库和密码哈希的登录名。如需详细了解在实例之间转移登录信息时的注意事项,请参阅 Microsoft 文档在 SQL Server 实例之间转移登录信息和密码

限制和排除的登录信息

sp_help_revlogin 会自动从导出中排除以下类型的登录:

  • Google Cloud 服务账号和内部管理账号。
  • 内部 SQL Server 系统账号(以 ## 为前缀的登录名)。
  • 分配给 sysadmin 固定服务器角色的登录名。
  • 分配给受限管理服务器角色的登录名。

停用数据库标志

如果您不再需要该存储过程,请将该标志设置为 off(或从实例中移除该标志):

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 点击修改
  4. 自定义实例部分,展开标志
  5. 找到 cloud sql enable sp_help_revlogin 并将其值设置为 off(或点击删除图标 以移除该标志)。
  6. 点击保存

gcloud CLI

gcloud sql instances patch INSTANCE_NAME \
    --database-flags="cloud sql enable sp_help_revlogin=off"

如果设置为 off 或移除,Cloud SQL 会自动从 msdb 数据库中舍弃 dbo.sp_help_revlogin

后续步骤