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

Azure App Service系统分配托管身份可连Azure SQL,用户分配身份失败求助

解决.NET 6 Azure App使用用户分配托管身份连接Azure SQL Server失败问题

问题背景

此前通过系统分配托管身份可成功让.NET 6 Azure App连接Azure SQL Server,步骤如下:

  • 在Azure App上启用系统分配托管身份;
  • 将Azure SQL Server的Azure Active Directory管理员设为该系统身份;
  • 在SQL Server访问控制(IAM)中添加该身份为所有者/参与者;
  • 使用连接字符串:Server=tcp:mydbs.database.windows.net;Database=thedb;Authentication=Active Directory Managed Identity;TrustServerCertificate=True;

因需多个Azure App连接同一SQL Server(无法设置多个AAD管理员),改用用户分配托管身份后连接失败,核心问题是SQL连接未正确识别用户分配托管身份。

解决思路与步骤

1. 修改连接字符串,指定用户分配托管身份的Client ID

系统分配托管身份是Azure App专属的,无需额外指定;但用户分配托管身份是独立资源,必须在连接字符串中明确指定其Client ID,让SqlClient知晓使用哪个身份认证:

Server=tcp:mydbs.database.windows.net;Database=thedb;Authentication=Active Directory Managed Identity;User Id=<用户分配托管身份的Client ID>;TrustServerCertificate=True;

注:Client ID可在Azure门户的「用户分配托管身份」详情页中,复制「应用程序(客户端) ID」的值。

2. 确认Azure App的身份配置

  • 检查Azure App的「身份」->「用户分配」列表,确认目标用户分配托管身份已成功添加且状态为「已分配」;
  • 无需强制关闭系统分配托管身份,两者可共存,只要连接字符串指定了用户分配身份的Client ID,SqlClient会优先使用该身份。

3. 补充SQL数据库内的用户权限配置

仅将用户分配身份设为SQL Server的AAD管理员可能不足以让其访问具体数据库,需手动在目标数据库中创建对应用户并赋予权限:
以SQL Server的AAD管理员身份登录数据库,执行以下T-SQL:

-- 替换为你的用户分配托管身份名称
CREATE USER [用户分配托管身份名称] FROM EXTERNAL PROVIDER;
-- 根据业务需求赋予合适角色,示例为db_owner
ALTER ROLE db_owner ADD MEMBER [用户分配托管身份名称];

4. 验证IAM权限范围

确保用户分配托管身份在SQL Server的访问控制(IAM)中被赋予了正确角色(如「SQL Server参与者」或「所有者」),且权限作用范围覆盖目标SQL Server或其所在资源组。

5. 检查SqlClient版本兼容性

确保项目中引用的Microsoft.Data.SqlClient版本≥2.1.0,该版本开始支持通过User Id参数指定用户分配托管身份进行认证。若版本过低,会导致无法识别该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:20:30