如何使用Azure Automation将Azure SQL数据库复制到不同服务器或订阅
Azure SQL跨服务器复制凭据报错解决方案
1 明确凭据字段填写规则
- Azure自动化账户连接Azure SQL服务器时,凭据的用户名字段必须填写服务器级登录名,也就是你创建的
Sana1,不能填数据库级用户名sanauser,场景2的报错本质是填写字段不符合要求导致的身份验证失败。 - 填写登录名时注意不要携带服务器后缀,不需要加
@xxxx.database.windows.net,仅填纯登录名Sana1即可。
2 校验登录名与用户的配置正确性
你已经同步了登录名SID,还需要确认以下配置:
- 源服务器上的
Sana1登录名需要分配源数据库的db_owner或者db_backupoperator权限,确保可读取数据库复制所需的全部数据 - 目标服务器上的
Sana1登录名需要完成和数据库用户的映射,并且分配目标库的db_owner权限,对应执行SQL命令如下:
-- 在目标服务器master库执行 CREATE USER sanauser FROM LOGIN Sana1; -- 在目标服务器的目标复制库执行 ALTER ROLE db_owner ADD MEMBER sanauser;
- 校验源和目标服务器的登录名SID一致性,两端master库分别执行以下命令,返回的SID必须完全相同:
SELECT sid FROM sys.sql_logins WHERE name = 'Sana1';
如果SID不一致,删除目标服务器的Sana1登录名,重新用源端SID创建即可。
3 排查自动化账户关联配置
- 确认Azure SQL服务器的防火墙规则已允许自动化账户的出站IP访问,同时开启「允许Azure服务和资源访问此服务器」开关
- 确认自动化账户使用的Az.Sql模块版本≥3.8.0,低版本模块存在跨服务器复制的身份验证兼容bug
- 确认凭据内填写的密码和
Sana1登录名的密码完全匹配,没有多余空格、特殊字符未转义的问题
4 临时规避方案
如果自动化账户方式始终报错,可以直接在本地PowerShell执行命令完成复制,替换对应参数即可:
$sourceServer = "源服务器名" $sourceDB = "源数据库名" $targetServer = "目标服务器名" $targetDB = "目标数据库名" $cred = Get-Credential # 弹窗输入Sana1和对应密码 New-AzSqlDatabaseCopy -ResourceGroupName "源资源组名" ` -ServerName $sourceServer ` -DatabaseName $sourceDB ` -CopyResourceGroupName "目标资源组名" ` -CopyServerName $targetServer ` -CopyDatabaseName $targetDB ` -Credential $cred
内容的提问来源于stack exchange,提问作者Ayush Tiwari
相关产品推荐
相关产品推荐

