授予Azure SQL MI AD读取权限报错400:无效对象标识符null如何解决?
问题产生原因
- 订阅跨AAD迁移后,SQL MI的系统分配托管身份未同步到新AAD:将订阅从原AAD切换到新建的AAD时,原AAD中与SQL MI绑定的托管身份、服务主体等对象不会自动同步到新AAD,点击授权按钮时系统无法读取到对应的对象ID,就会返回null标识符错误。
- SQL MI创建时托管身份注册失败:如果创建SQL MI时,当前操作账号在新AAD中没有足够的权限(比如没有应用注册权限),会导致SQL MI的系统分配托管身份没有在AAD中成功创建,授权时无法获取到有效对象ID。
- 浏览器会话缓存冲突:切换AAD租户后,浏览器缓存了原AAD的会话数据,门户请求时携带了旧租户的上下文,导致读取对象ID时返回空值。
解决思路
- 先验证托管身份存在性:进入当前AAD的「企业应用程序」页面,清除筛选条件后搜索你的SQL MI实例名称,确认是否存在对应的应用条目。如果不存在,先进入SQL MI的「标识」配置页,将系统分配托管身份关闭后保存,等待5分钟再重新开启,触发托管身份在新AAD中重新注册。
- 清除缓存后重试:使用浏览器无痕模式重新登录Azure门户,或者清理当前浏览器的站点缓存、Cookie后,再次进入SQL MI的AD管理员配置页执行授权操作,避免旧会话的上下文干扰。
- 手动执行授权操作:如果门户UI操作持续报错,可以用PowerShell执行授权命令,跳过门户的交互逻辑:
# 登录当前AAD对应的Azure账号 Connect-AzAccount -Tenant <你的新AAD租户ID> # 获取SQL MI的托管身份对象ID $miId = (Get-AzSqlInstance -Name <SQL MI实例名> -ResourceGroupName <对应资源组名>).Identity.PrincipalId # 授予Microsoft Graph目录读取权限 Grant-AzADAppPermission -ObjectId $miId -ApiId "00000003-0000-0000-c000-000000000000" -PermissionId "df021288-bdef-4463-88db-98f22de87200"
- 重新注册SQL资源提供程序:如果以上操作都无效,进入订阅的「资源提供程序」页面,找到
Microsoft.Sql条目,点击「重新注册」,等待注册完成后再尝试授权操作。
内容的提问来源于stack exchange,提问作者GilesDMiddleton
相关产品推荐
相关产品推荐

