适用于: 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 Admin,并从当前Microsoft Entra 租户中选择用户、组、应用程序或托管标识。
- 若要删除管理员,请选择要删除的管理员的 “删除 ”图标。
- 选择 “保存 ”并等待预配作完成。
注意
即将推出对通过 Azure SDK、az cli 和 Azure PowerShell 进行Microsoft Entra Administrators 管理的支持。
使用 SQL 管理 Microsoft Entra 角色
从 Azure 门户或 API 创建第一个Microsoft Entra 管理员后,使用管理员角色管理 Azure Database for PostgreSQL 灵活服务器实例中的 Microsoft Entra 角色。
若要在 Azure Database for PostgreSQL 灵活服务器中获得与 Microsoft Entra 集成的最佳体验,建议熟悉 Microsoft 标识平台。
主体类型
Azure Database for PostgreSQL 灵活服务器在内部存储 PostgreSQL 数据库角色与 AzureAD 对象的唯一标识符之间的映射。 每个 PostgreSQL 数据库角色都可以映射到以下 Microsoft Entra 对象类型之一:
- 用户 - 包括租户本地用户和来宾用户。
- 服务主体。 包括应用程序和托管标识
- 组 将 PostgreSQL 角色链接到 Microsoft Entra 组时,此组的任何用户或服务主体成员都可以使用组角色连接到 Azure Database for PostgreSQL 灵活服务器实例。
使用 SQL 列出 Microsoft Entra 角色
select * from 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 主体名称创建用户或角色
select * from 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 管理员来删除一个 Microsoft Entra 角色,会出现错误。
注意
此方法在 PostgreSQL v15 之前有效。 在版本 v16 之后,DROP ROLE 需要 superadmin 角色。 请联系 Azure 支持部门删除角色。
DROP ROLE rolename;
使用 Microsoft Entra 对象标识符创建角色
select * from 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 门户中,在 “企业应用程序 ”页上找到所需的 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 角色。