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

部署服务主体配置Azure SQL外部用户的权限需求及问题排查

问题描述

已完成以下配置:

  • 为Azure SQL实例设置Azure Active Directory管理员
  • 配置Azure SQL仅允许Azure AD身份验证
  • 为Azure SQL实例配置托管标识
  • 为部署服务主体分配Azure Directory Readers角色

个人身份登录数据库时,执行命令成功:

CREATE USER [my-managed-apiname] FROM EXTERNAL PROVIDER

但通过Azure DevOps流水线执行同一命令时,报错:

Principal 'my-managed-apiname' could not be resolved. Error message: 'AADSTS700016: Application with identifier 'GUID' was not found

猜测是部署服务主体的访问权限问题,需调整应用注册或企业应用的哪些设置?

解决方案

一、调整目标托管标识的企业应用可见性

如果my-managed-apiname是用户分配的托管标识:

  • 进入Azure AD -> 企业应用,找到该托管标识对应的条目(名称与托管标识一致)
  • 进入属性页面,将“对用户和组可见?”设置为「是」(若设为否,非全局管理员权限的服务主体无法读取该标识)

二、为部署服务主体补充Microsoft Graph权限

Directory Readers角色可能不足以让服务主体读取所有应用/托管标识,需添加更明确的应用权限:

  • 进入Azure AD -> 应用注册,找到部署服务主体对应的应用注册
  • 切换到API权限 -> 点击「添加权限」
  • 选择「Microsoft Graph」-> 「应用权限」
  • 添加Application.Read.All权限(允许服务主体读取Azure AD中所有应用、服务主体及托管标识)
  • 点击「授予管理员同意」(需全局管理员权限执行)

三、验证托管标识的应用ID匹配

  • 进入Azure门户 -> 托管标识,找到my-managed-apiname对应的标识,复制「应用程序ID」
  • 对比报错信息中的GUID,确认两者一致:
    • 若不一致,说明命令中的my-managed-apiname名称错误,或托管标识已被重新创建

四、流水线身份验证确认

  • 确保流水线使用的服务主体是已分配Directory Readers角色的那个,避免身份误用
  • 确认流水线连接Azure SQL时,采用的是Azure AD身份验证方式(如使用服务主体的客户端ID、租户ID及密钥/证书)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:50:30