在 Azure Database for PostgreSQL 灵活服务器中管理 Microsoft Entra 组
适用于:Azure Database for PostgreSQL - 灵活服务器
本文介绍如何在 Azure Database for PostgreSQL 灵活服务器实例中创建已启用 Microsoft Entra ID 的数据库角色。
注意
本指南假定已在 Azure Database for PostgreSQL 灵活服务器实例上启用了 Microsoft Entra 身份验证。 请参阅如何配置 Microsoft Entra 身份验证
如果想要了解如何创建和管理 Azure 订阅用户及其权限,可以访问“Azure 基于角色的访问控制 (Azure RBAC)”一文或查看如何自定义角色。
使用 Azure 门户或 Azure 资源管理器 (ARM) API 创建或删除 Microsoft Entra 管理员
- 在 Azure 门户中打开 Azure Database for PostgreSQL 灵活服务器实例的“身份验证”页。
- 若要添加管理员,请选择“添加 Microsoft Entra 管理员”,然后从当前 Microsoft Entra 租户中选择用户、组、应用程序或托管标识。
- 删除管理员 - 请选择要删除的管理员对应的删除图标。
- 选择保存并等待预配操作完成。
注意
对通过 Azure SDK、az cli 和 Azure PowerShell 管理 Microsoft Entra 管理员的支持即将推出。
使用 SQL 管理 Microsoft Entra 角色
从 Azure 门户或 API 创建第一个 Microsoft Entra 管理员后,可以使用管理员角色在 Azure Database for PostgreSQL 灵活服务器实例中管理 Microsoft Entra 角色。
建议熟悉 Microsoft 标识平台,以充分利用 Microsoft Entra 与 Azure Database for PostgreSQL 灵活服务器的集成。
主体类型
Azure Database for PostgreSQL 灵活服务器在内部存储 PostgreSQL 数据库角色与 AzureAD 对象的唯一标识符之间的映射。 每个 PostgreSQL 数据库角色都可以映射到以下 Microsoft Entra 对象类型之一:
- 用户 - 包括租户本地用户和来宾用户。
- 服务主体。 包括应用程序和托管标识
- 组 将 PostgreSQL 角色链接到 Microsoft Entra 组时,此组的任何用户或服务主体成员都可以使用组角色连接到 Azure Database for PostgreSQL 灵活服务器实例。
使用 SQL 列出 Microsoft Entra 角色
pg_catalog.pgaadauth_list_principals(isAdminValue boolean)
参数
isAdminValue
boolean
,当为 true
时返回管理用户。 当为 false
时,返回所有 Microsoft Entra 用户,包括 Microsoft Entra 管理员和非管理员。
返回类型
TABLE(rolname name, principalType text, objectId text, tenantId text, isMfa integer, isAdmin integer)
,具有以下架构的表:
rolname
,PostgreSQL 中角色的名称。principalType
,Microsoft Entra ID 中的主体类型。 可以是user
、group
或service
。objectId
,此主体的 Microsoft Entra ID 中对象的标识符。tenantId
,Microsoft Entra ID 中托管此主体的租户的标识符。isMfa
,如果用户/角色强制实施 MFA,则返回值1
。isAdmin
,如果用户/角色是 PostgreSQL 中的管理员,则返回值1
。
使用 Microsoft Entra 主体名称创建用户/角色
pg_catalog.pgaadauth_create_principal(roleName text, isAdmin boolean, isMfa boolean)
参数
roleName
text
,待创建角色的名称。 这必须与 Microsoft Entra 主体的名称相匹配。
- 对于用户,请使用配置文件中的用户主体名称。 对于来宾用户,请在其主域中包含带有 #EXT# 标记的全名。
- 对于组和服务主体,请使用显示名称。 该名称在租户中必须唯一。
isAdmin
boolean
,当为 true
时,它会创建一个 PostgreSQL 管理员用户(具备 azure_pg_admin
角色的成员,并具有 CREATEROLE 和 CREATEDB 权限)。 当为 false
时,它会创建一个常规 PostgreSQL 用户。
isMfa
boolean
,当为 true
时,它会强制该 PostgreSQL 用户进行多重身份验证。
重要
isMfa
标志会测试 Microsoft Entra ID 令牌中的 mfa
声明,但它不会影响令牌获取流程。 例如,如果未为主体的租户配置多重身份验证,它将阻止使用该功能。 如果租户要求对所有令牌进行多重身份验证,则此标志将变得毫无用处。
返回类型
text
,由字符串“已为 roleName 创建角色”组成的单个值,其中 roleName 是传递给 roleName 参数的参数。
使用 Microsoft Entra 主体名称删除角色
请记住,必须使用 Microsoft Entra 管理员删除在 PostgreSQL 中创建的任何 Microsoft Entra 角色。如果使用常规 PostgreSQL 管理员删除 Entra 角色,则会导致错误。
DROP ROLE rolename;
使用 Microsoft Entra 对象标识符创建角色
pg_catalog.pgaadauth_create_principal_with_oid(roleName text, objectId text, objectType text, isAdmin boolean, isMfa boolean)
参数
roleName
text
,待创建角色的名称。
objectId
text
,Microsoft Entra 对象的唯一对象标识符。
- 对于“用户”、“组”和“托管标识”,可以通过在 Azure 门户的 Microsoft Entra ID 页中搜索对象名称来查找 objectId。 请参阅本指南作为示例
- 对于组和服务主体,请使用显示名称。 该名称在租户中必须唯一。
- 对于应用程序,必须使用相应服务主体的 objectId。 在 Azure 门户中,可以在 Azure 门户中的“企业应用程序”页面上找到所需的 objectId。
objectType
text
,要链接到此角色的 Microsoft Entra 对象的类型。 可以是 user
、group
或 service
。
isAdmin
boolean
,当为 true
时,它会创建一个 PostgreSQL 管理员用户(具备 azure_pg_admin
角色的成员,并具有 CREATEROLE 和 CREATEDB 权限)。 当为 false
时,它会创建一个常规 PostgreSQL 用户。
isMfa
boolean
,当为 true
时,它会强制该 PostgreSQL 用户进行多重身份验证。
重要
isMfa
标志会测试 Microsoft Entra ID 令牌中的 mfa
声明,但它不会影响令牌获取流程。 例如,如果未为主体的租户配置多重身份验证,它将阻止使用该功能。 如果租户要求对所有令牌进行多重身份验证,则此标志将变得毫无用处。
返回类型
text
,由字符串“已为 roleName 创建角色”组成的单个值,其中 roleName 是传递给 roleName 参数的参数。
使用 SQL 为现有的 PostgreSQL 角色启用 Microsoft Entra 身份验证
Azure Database for PostgreSQL 灵活服务器使用与数据库角色关联的安全标签来存储其相应的 Microsoft Entra ID 映射。
可以使用以下 SQL 分配所需的安全标签,将其映射到 Microsoft Entra 对象:
SECURITY LABEL for "pgaadauth" on role "<roleName>" is 'aadauth,oid=<objectId>,type=<objectType>,admin';
参数
roleName
text
,需要启用 Microsoft Entra 身份验证的现有 PostgreSQL 角色的名称。
objectId
text
,Microsoft Entra 对象的唯一对象标识符。
objectType
text
,可以设置为 user
、group
或 service
(适用于使用其自己的服务凭据进行连接的应用程序或托管标识)。
admin
text
,可以存在或不存在。 安全标签中存在此部分的用户/角色可以管理其他 Microsoft Entra ID 角色。