如何通过Entra组实现Azure应用服务托管身份认证SQL Server?
解决方案:通过Entra组统一管理托管身份访问Azure VM上的SQL Server
一、解决托管身份页面「添加用户/组」按钮禁用的问题
系统分配的托管身份无法通过Azure门户直接加入Entra组,这是门户的固有限制,与账号权限无关——即使拥有Cloud Application Administrator或Application Administrator权限也无法启用该按钮,必须通过PowerShell或Microsoft Graph API操作:
- PowerShell方式:
# 获取目标托管身份的对象ID $managedIdentity = Get-AzADServicePrincipal -DisplayName "你的应用服务名称" # 获取Entra安全组的对象ID $targetGroup = Get-AzADGroup -DisplayName "你的目标组名称" # 将托管身份加入组 Add-AzADGroupMember -TargetGroupObjectId $targetGroup.Id -MemberObjectId $managedIdentity.Id - Microsoft Graph API方式(需账号拥有
GroupMember.ReadWrite.All权限):POST https://graph.microsoft.com/v1.0/groups/{组对象ID}/members/$ref Content-Type: application/json { "@odata.id": "https://graph.microsoft.com/v1.0/servicePrincipals/{托管身份对象ID}" }
如果是用户分配的托管身份仍出现按钮禁用,需检查账号是否拥有Directory.ReadWrite.All或GroupMember.ReadWrite.All权限,Cloud Application Administrator权限不包含组成员写入的完整权限,需单独分配上述细粒度权限。
二、通过Entra组实现托管身份认证SQL Server的完整流程
- 创建合规的Entra安全组
在Entra ID中创建类型为「安全」的组,默认安全组支持添加服务主体(即托管身份),无需额外配置。 - 批量添加托管身份到组
用上述PowerShell/Graph API方法,将所有需要访问SQL的应用服务托管身份加入该组。 - 在SQL Server中创建组登录名
连接到Azure VM上的SQL Server,执行以下语句:CREATE LOGIN [你的Entra组名称] FROM EXTERNAL PROVIDER; - 分配数据库权限
切换到目标业务数据库,创建组用户并分配所需权限:USE [你的数据库名称]; CREATE USER [你的Entra组名称] FROM LOGIN [你的Entra组名称]; -- 示例:分配数据读取权限 ALTER ROLE db_datareader ADD MEMBER [你的Entra组名称]; -- 若需写入权限,可添加db_datawriter角色 -- ALTER ROLE db_datawriter ADD MEMBER [你的Entra组名称]; - 验证访问
应用服务无需修改原有托管身份认证配置,连接SQL时会自动继承所在Entra组的权限,实现统一管理。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

