教程:将目录读取者角色分配到 Microsoft Entra 组并管理角色分配
适用于: Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics
本文介绍如何在 Microsoft Entra ID(以前为 Azure Active Directory)中创建组,并向该组分配目录读取者角色。 通过目录读取者权限,组所有者能够将其他成员添加到组中,如 Azure SQL 数据库的托管标识、Azure SQL 托管实例和 Azure Synapse Analytics。 这就不需要全局管理员或特权角色管理员来为租户中的每个逻辑服务器标识直接分配目录读取者角色。
注意
Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。
本教程使用使用 Microsoft Entra 组来管理角色分配中引入的功能。
有关将目录读取者角色分配给 Azure SQL Microsoft Entra 组的优势的详细信息,请参阅 Azure SQL 的 Microsoft Entra ID 中的目录读取者角色。
注意
借助 Azure SQL 的 Microsoft Graph 支持,可以使用较低级别的权限替换“目录读取者”角色。 有关详细信息,请参阅 Microsoft Entra ID 中适用于 Azure SQL 的用户分配的托管标识。
先决条件
- 一个 Microsoft Entra 租户。 有关详细信息,请参阅使用 Azure SQL 配置和管理 Microsoft Entra 身份验证。
- SQL 数据库、SQL 托管实例或 Azure Synapse。
使用 Azure 门户的目录读取者角色分配
创建新组并分配所有者和角色
让特权用户登录到 Azure 门户。
转到“Microsoft Entra ID”。 在“托管”下,转到“组” 。 选择“新建组”以创建一个新组。
选择“安全”作为组类型,并填充其余字段。 确保将“Microsoft Entra 角色可以分配给组”设置切换为“是”。 然后,将 Microsoft Entra ID 目录读取者角色分配给组。
将 Microsoft Entra 用户作为所有者分配给创建的组。 组所有者可以是未分配任何 Microsoft Entra 管理角色的常规 AD 用户。 所有者应该是管理 SQL 数据库、SQL 托管实例或 Azure Synapse 的用户。
选择“创建”
检查创建的组
注意
确保“组类型”为“安全” 。 Azure SQL 不支持 Microsoft 365 组。
若要检查和管理已创建的组,请返回到 Azure 门户中的“组”窗格,并搜索组名称。 选择组后,可以在“管理”设置的“所有者”和“成员”菜单下添加其他所有者和成员 。 还可查看组的“已分配角色”。
向组添加 Azure SQL 托管标识
注意
虽然我们在此示例中使用 SQL 托管实例,但可以对 SQL 数据库或 Azure Synapse 应用类似的步骤,以获得相同的结果。
在后续步骤中,不再需要全局管理员或特权角色管理员用户。
以管理 SQL 托管实例的用户身份登录 Azure 门户,并且是之前创建的组的所有者。
在 Azure 门户中查找 SQL 托管实例资源的名称。
在 SQL 托管实例预配期间,将为实例创建 Microsoft Entra 标识,并将其注册为 Microsoft Entra 应用程序。 标识与 SQL 托管实例名称的前缀同名。 通过执行以下步骤,可查找 SQL 托管实例的标识(也称为服务主体):
- 转到“Microsoft Entra ID”。 在“管理”设置下,选择“企业应用程序” 。 对象 ID 是实例的标识。
转到“Microsoft Entra ID”。 在“托管”下,转到“组” 。 选择所创建的组。 在组的“托管”设置下,选择“成员” 。 选择“添加成员”,并通过搜索上面找到的名称,将 SQL 托管实例服务主体添加为组的成员。
注意
通过 Azure 系统传播服务主体权限并允许访问 Microsoft 图形 API 可能需要几分钟时间。 在为 SQL 托管实例预配 Microsoft Entra 管理员之前,可能需要等待几分钟。
注解
对于 SQL 数据库和 Azure Synapse,可以在创建逻辑服务器期间或创建服务器之后创建服务器标识。 有关如何在 SQL 数据库或 Azure Synapse 中创建或设置服务器标识的详细信息,请参阅使服务主体能够创建 Microsoft Entra 用户。
对于 SQL 托管实例,必须先将目录读取者角色分配给托管实例标识,然后才能为托管实例设置 Microsoft Entra 管理员。
为逻辑服务器设置 Microsoft Entra 管理员时,SQL 数据库或 Azure Synapse 不需要向服务器标识分配目录读取者角色。 但是,要在 SQL 数据库或 Azure Synapse 中代表 Microsoft Entra 应用程序实现 Microsoft Entra 对象创建,则需要目录读取者角色。 如果未将该角色分配给逻辑服务器标识,则将无法在 Azure SQL 中创建 Microsoft Entra 用户。 有关详细信息,请参阅使用 Azure SQL 的 Microsoft Entra 服务主体。
使用 PowerShell 的目录读取者角色分配
重要
全局管理员或特权角色管理员需要运行这些初始步骤。 除 PowerShell 外,Microsoft Entra ID 还提供 Microsoft Graph API 以在 Microsoft Entra ID 中创建可分配角色的组。
使用以下命令下载 Microsoft Graph PowerShell 模块。 可能需要以管理员身份运行 PowerShell。
Install-Module Microsoft.Graph.Authentication Import-Module Microsoft.Graph.Authentication # To verify that the module is ready to use, run the following command: Get-Module Microsoft.Graph.Authentication
连接 Microsoft Entra 租户。
Connect-MgGraph -Environment China
创建安全组以分配目录读取者角色。
DirectoryReaderGroup
、Directory Reader Group
和DirRead
可根据你的喜好进行更改。
$group = New-MgGroup -DisplayName "DirectoryReaderGroup" -Description "Directory Reader Group" -SecurityEnabled:$true -IsAssignableToRole:$true -MailEnabled:$false -MailNickname "DirRead" $group
将目录读取者角色分配给组。
# Displays the Directory Readers role information $roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq 'Directory Readers'" $roleDefinition
# Assigns the Directory Readers role to the group $roleAssignment = New-MgRoleManagementDirectoryRoleAssignment -DirectoryScopeId '/' -RoleDefinitionId $roleDefinition.Id -PrincipalId $group.Id $roleAssignment
将所有者分配给组。
- 将
<username>
替换为你想要其拥有该组的用户。 通过重复这些步骤来添加多个所有者。
$newGroupOwner = Get-MgUser -UserId "<username>" $newGroupOwner
$GrOwner = New-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectId $newGroupOwner.Id
检查组的所有者:
Get-MgGroupOwner -GroupId $group.Id
- 将
将服务主体分配为组的成员
在后续步骤中,不再需要全局管理员或特权角色管理员用户。
使用也可管理 Azure SQL 资源的组所有者,运行以下命令以连接到 Microsoft Entra ID。
Connect-MgGraph -Environment China
将服务主体分配为所创建组的成员。
- 使用逻辑服务器或托管实例的名称替换
<ServerName>
。 有关详细信息,请参阅将 Azure SQL 服务标识添加到组部分
# Returns the service principal of your Azure SQL resource $managedIdentity = Get-MgServicePrincipal -Filter "displayName eq '<ServerName>'" $managedIdentity
# Adds the service principal to the group New-MgGroupMember -GroupId $group.Id -DirectoryObjectId $managedIdentity.Id
以下命令将返回服务主体对象 ID,指示已将其添加到组:
Get-MgGroupMember -GroupId $group.Id -Filter "Id eq '$($managedIdentity.Id)'"
- 使用逻辑服务器或托管实例的名称替换