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

使用用户分配托管标识从Azure App Service连接Azure SQL遇问题求助

用户分配托管标识连接Azure App Service到SQL报错的排查与解决

问题场景

已完成以下操作但Azure App Service连接SQL时报错:

  • 创建用户分配的托管标识
  • 将标识分配给Azure App Service
  • 在Azure SQL中添加该标识用户并分配角色
  • 添加AZURE_CLIENT_ID应用设置,值为标识的客户端ID
  • 连接字符串添加Authentication=Active Directory Managed Identity;User ID=<client id of the identity>;

报错信息:

Received a non-retryable error. Identity Response Code: BadRequest, Response: {"statusCode":400,"message":"No User Assigned or Delegated Managed Identity found for specified ClientId/ResourceId/PrincipalId."}

注:Azure虚拟机使用相同代码可正常连接,系统分配的托管标识也能正常连接。

排查与解决步骤

  • 确认用户分配标识的绑定状态
    进入App Service的「标识」→「用户分配」页面,确认目标标识的状态为「已分配」。若刚完成分配,可能存在部署延迟,等待5-10分钟后重试,或手动重启App Service触发配置刷新。

  • 校验AZURE_CLIENT_ID配置准确性
    检查App Service「配置」→「应用程序设置」中的AZURE_CLIENT_ID值,确保与用户分配标识的客户端ID完全一致(无多余空格、大小写错误)。同时确认没有其他环境变量或启动命令覆盖该配置。

  • 修正连接字符串参数
    确保连接字符串中的User ID值是用户分配标识的客户端ID,而非对象ID或资源ID(三者容易混淆,必须使用客户端ID)。另外,连接字符串中不要包含Password参数,托管身份认证无需密码。

  • 检查标识与App Service的权限状态
    登录Azure AD确认用户分配标识未被删除或禁用;排查App Service所在订阅/资源组的RBAC策略,确保没有阻止App Service访问该托管标识的规则(系统分配标识可用的话,此问题概率较低)。

  • 验证SDK/驱动版本
    对比虚拟机与App Service使用的数据库驱动/SDK版本,确保使用支持用户分配托管身份的最新稳定版(例如.NET的Microsoft.Data.SqlClient需4.0及以上版本)。部分场景下需显式指定客户端ID,以.NET为例:

    var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
    var credential = new ManagedIdentityCredential(clientId);
    var token = credential.GetToken(new TokenRequestContext(new[] { "https://database.windows.net/.default" })).Token;
    
    var connectionString = "Server=tcp:your-sql-server.database.windows.net,1433;Database=your-db;";
    using var conn = new SqlConnection(connectionString);
    conn.AccessToken = token;
    conn.Open();
    
  • 强制重启App Service
    配置变更后偶尔会存在缓存延迟,手动重启App Service确保所有设置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:02:33