You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Automation运行Invoke-Sqlcmd报<token-identified principal>登录失败如何解决

问题原因

本地执行时使用的是具备Azure SQL高权限的个人账号,而Azure Automation Runbook默认使用Azure Run As服务主体身份执行,二者权限、运行环境配置均不同,因此会出现本地正常、Runbook报错的情况,可按以下步骤排查修复:

修复方案

  • 给Run As服务主体授权Azure SQL访问权限
    进入你的Azure SQL Server管理页,找到「Azure Active Directory」配置项,将Automation账户对应的Run As服务主体设置为SQL Server的AAD管理员,这是最快的验证方案。如果不想给全局管理员权限,也可以提前在master库和源库中为该服务主体创建外部用户,并授予ALTER ANY USER、ALTER ROLE等必要权限。
  • 添加数据库就绪等待逻辑
    New-AzSqlDatabaseCopy执行后数据库不会立刻就绪,直接发起连接会触发登录失败。在执行Invoke-Sqlcmd前添加等待逻辑,比如先循环检查目标数据库的状态为Available后再执行后续SQL,也可以临时添加Start-Sleep -Seconds 45先验证是否为该问题导致。
  • 修复脚本语法错误
    你代码中Invoke-Sqlcmd那一行的反引号(换行符)后面存在多余空格,会导致参数解析异常,将反引号后的空格删除,确保换行符正常生效。
  • 确认基础配置正确性
    1. 检查$databaseServereInstance参数格式是否完整,需为SQL服务器名.database.windows.net,1433(国内Azure后缀为database.chinacloudapi.cn)
    2. 如果你使用的是国内Azure,将Get-AzAccessToken的ResourceUrl改为https://database.chinacloudapi.cn/
    3. 确认Azure SQL Server防火墙已开启「允许Azure服务和资源访问此服务器」选项,避免Automation的动态IP被拦截。
  • 验证Token有效性
    可在Runbook中输出获取到的Access Token,检查受众(aud)是否为SQL资源地址、身份是否为预期的Run As服务主体,避免上下文切换导致Token获取错误。

内容的提问来源于stack exchange,提问作者Atdhe Kurteshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:39:01