本文档介绍了如何使用 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 角色:
- Cloud SQL Admin (
roles/cloudsql.admin) - Cloud SQL Editor (
roles/cloudsql.editor)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含配置数据库标志所需的 cloudsql.instances.update 权限。
数据库权限
确保您有权访问默认的 sqlserver SQL Server 用户角色。
启用数据库标志
如需在 msdb 数据库中安装 sp_help_revlogin 存储过程,请在实例上启用 cloud sql enable sp_help_revlogin 数据库标志。
Google Cloud 控制台
- 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
- 点击实例名称,打开其概览页面。
- 点击修改。
- 在自定义实例部分,展开标志。
- 点击添加标志。
- 从可用标志列表中选择 cloud sql enable sp_help_revlogin。
- 将标志值设置为 on。
- 点击保存。
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替换为要导出的登录名的名称。
在目标实例上重新创建登录名
- 从查询输出中复制生成的
CREATE LOGIN语句。 - 连接到目标 SQL Server 实例。
- 在查询窗口中或使用
sqlcmd执行生成的语句。
生成的语句会在目标实例上创建具有原始 SID、默认数据库和密码哈希的登录名。如需详细了解在实例之间转移登录信息时的注意事项,请参阅 Microsoft 文档在 SQL Server 实例之间转移登录信息和密码。
限制和排除的登录信息
sp_help_revlogin 会自动从导出中排除以下类型的登录:
- Google Cloud 服务账号和内部管理账号。
- 内部 SQL Server 系统账号(以
##为前缀的登录名)。 - 分配给
sysadmin固定服务器角色的登录名。 - 分配给受限管理服务器角色的登录名。
停用数据库标志
如果您不再需要该存储过程,请将该标志设置为 off(或从实例中移除该标志):
Google Cloud 控制台
- 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
- 点击实例名称,打开其概览页面。
- 点击修改。
- 在自定义实例部分,展开标志。
- 找到 cloud sql enable sp_help_revlogin 并将其值设置为 off(或点击删除图标 以移除该标志)。
- 点击保存。
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。
后续步骤
- 如需详细了解 SQL Server 用户,请参阅 SQL Server 用户。
- 如需详细了解如何配置数据库标志,请参阅配置数据库标志。
- 如需详细了解受支持的存储过程,请参阅 SQL Server 存储过程。
- 如需详细了解如何转移登录名和密码,请参阅在 SQL Server 实例之间转移登录名和密码。