如何将Azure SQL登录名(含SID、密码)跨订阅迁移至另一服务器master库
Azure SQL 跨订阅迁移登录名(含SID、密码)操作指引
以下方案可直接实现将SQL身份验证的登录名完整迁移至另一订阅的Azure SQL服务器master库,全程无需依赖跨订阅权限关联,只要分别获取两端服务器的admin访问权限即可操作:
1. 源端生成带SID和密码哈希的创建脚本
使用源Azure SQL服务器的admin账号连接其master库,执行如下查询,直接获取所有自定义SQL登录的创建语句:
SELECT 'CREATE LOGIN [' + name + '] WITH PASSWORD = ' + CONVERT(VARCHAR(MAX), LOGINPROPERTY(name, 'PasswordHash'), 1) + ' HASHED, SID = ' + CONVERT(VARCHAR(MAX), sid, 1) + ', CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;' AS create_login_script FROM sys.sql_logins WHERE type = 'S' AND name NOT IN ( 'sa', '##MS_SQLResourceSigningCertificate##', '##MS_SQLReplicationSigningCertificate##', '##MS_SQLAuthenticatorCertificate##', '##MS_PolicySigningCertificate##', '##MS_SmoExtendedSigningCertificate##', '##MS_PolicyTsqlExecutionLogin##' )
说明:若你需要保留原登录名的密码过期、密码策略配置,修改查询中对应参数的取值即可。
2. 目标端执行脚本完成迁移
使用目标Azure SQL服务器的admin账号连接其master库,直接粘贴上一步导出的所有创建语句执行即可。
注意:无需对两个订阅做任何信任配置或关联操作,只要能正常访问两端服务器即可执行。
3. 迁移结果验证
在目标端master库执行如下查询,比对返回的登录名、SID和源端数据是否一致:
SELECT name, sid FROM sys.sql_logins WHERE type = 'S'
也可直接使用迁移后的登录名尝试登录目标Azure SQL服务器,验证密码是否正常生效。
常见问题处理
- 仅SQL身份验证的登录名需要迁移SID和密码哈希,Azure AD身份验证的登录名直接在目标端使用相同AD实体重新创建即可,无需匹配SID
- 若迁移后对应数据库内的用户出现孤立问题,在对应业务库中执行如下命令修复即可:
ALTER USER [对应的数据库用户名] WITH LOGIN [迁移的登录名]
内容的提问来源于stack exchange,提问作者mark steben
相关产品推荐
相关产品推荐

