适用于:Azure SQL 数据库
Azure SQL 托管实例
本文介绍如何在 Microsoft Entra ID(以前为 Azure Active Directory)中创建组,并向该组分配目录读取者角色。 目录读取者权限允许组所有者向组中添加更多成员,例如 Azure SQL 数据库 和 Azure SQL 托管实例 的托管标识。 这就不需要特权角色管理员或来为租户中的每个逻辑服务器标识直接分配目录读取者角色。
注意
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 中的 托管标识以用于 Azure SQL。
先决条件
- Microsoft Entra 租户。 有关详细信息,请参阅使用 Azure SQL 配置和管理 Microsoft Entra 身份验证。
- 一个 Azure SQL 数据库 或 Azure SQL 托管实例。
使用 Azure 门户的目录读取者角色分配
创建新组并分配所有者和角色
- 此初始设置需要具有特权角色管理员权限的用户。
- 让特权用户登录到 Azure 门户。
- 转到 Microsoft Entra ID 资源。 在 “管理”下,转到 “组”。 选择“新建组”以创建一个新组。
- 选择“安全”作为组类型,并填充其余字段。 确保将“Microsoft Entra 角色可以分配给组”设置切换为“是”。 然后,将 Microsoft Entra ID 目录读取者角色分配给组。
- 将 Microsoft Entra 用户指定为你创建的组的所有者。 组所有者可以是未分配任何 Microsoft Entra 管理角色的常规 AD 用户。 所有者应该是管理你 SQL 数据库或 SQL 托管实例 的用户。
- 选择“创建”
检查已创建的群组
注意
确保组类型为安全。 Azure SQL 不支持Microsoft 365 个组。
若要检查和管理已创建的组,请返回到 Azure 门户中的“组”窗格,并搜索组名称。 选择组后,可以在“管理”设置的“所有者”和“成员”菜单下添加其他所有者和成员 。 还可查看组的“已分配角色”。
向组添加 Azure SQL 托管标识
注意
本文示例中使用了 SQL 托管实例,但你也可以对 SQL 数据库应用类似步骤以达到相同效果。
在后续步骤中,不再需要特权角色管理员用户。
以管理 SQL 托管实例的用户身份登录到 Azure 门户,并且是之前创建的组的所有者。
在 Azure 门户中查找 SQL 托管实例资源的名称。
在 SQL 托管实例预配期间,将为实例创建 Microsoft Entra 标识,并将其注册为 Microsoft Entra 应用程序。 身份的名称与 SQL 管理实例名称的前缀相同。 通过执行以下步骤,可查找 SQL 托管实例的标识(也称为服务主体):
- 转到 Microsoft Entra ID 资源。 在“管理”设置下,选择“企业应用程序” 。 对象 ID 是实例的标识。
转到 Microsoft Entra ID 资源。 在 “管理”下,转到 “组”。 选择所创建的组。 在组的 “管理 ”设置下,选择“ 成员”。 选择“添加成员”,并通过搜索上面找到的名称,将 SQL 托管实例服务主体添加为组的成员。
注意
可能需要几分钟时间才能通过 Azure 系统传播服务主体权限,并允许访问 Microsoft Graph。 在为 SQL 托管实例预配 Microsoft Entra 管理员之前,可能需要等待几分钟。
注解
对于 SQL 数据库,请在逻辑服务器创建期间或创建服务器后创建服务器身份。 有关在 SQL 数据库中创建或设置服务器身份的更多信息,请参见 “启用服务主体以创建 Microsoft Entra 用户”。
对于 SQL 托管实例,必须先将 Directory Readers 角色分配给托管实例标识,然后才能为托管实例设置 Microsoft Entra 管理员。
在为逻辑服务器设置 Microsoft Entra 管理员时,你不需要为 SQL 数据库的服务器标识分配 Directory Readers 角色。 然而,要代表 Microsoft Entra 应用程序在 SQL 数据库中创建 Microsoft Entra 对象,则需要 Directory Readers 角色(或在 Azure SQL 的 Microsoft Entra 管理身份中讨论的较低级别权限)。 如果你没有将角色分配给逻辑服务器身份,在 Azure SQL 创建 Microsoft Entra 用户会失败。 有关详细信息,请参阅 Microsoft Entra 服务主体与 Azure SQL。
使用 PowerShell 的目录读取者角色分配
重要
特权角色管理员将需要运行这些初始步骤。 除 PowerShell 外,Microsoft Entra ID 还提供 Microsoft 图形 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 -OdataId "https://microsoftgraph.chinacloudapi.cn/v1.0/users/$($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)'"- 用你的逻辑服务器或托管实例的名称替换
在 Azure Synapse Analytics 中分配 Directory Readers 角色
关于 Azure Synapse Analytics,请参见教程:将目录阅读器角色分配到 Microsoft Entra 组并管理角色分配。