使用 Microsoft Entra ID 通过 PostgreSQL 进行身份验证

适用于:Azure Database for PostgreSQL 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 强烈建议升级到 Azure Database for PostgreSQL - 灵活服务器。 有关迁移到 Azure Database for PostgreSQL - 灵活服务器的详细信息,请参阅 Azure Database for PostgreSQL 单一服务器的最新动态

Microsoft Entra 身份验证是一种使用 Microsoft Entra ID 中定义的标识连接到 Azure Database for PostgreSQL 的机制。 使用 Microsoft Entra 身份验证,可以在一个中心位置管理数据库用户标识和其他 Azure 服务,从而简化权限管理。

使用 Microsoft Entra ID 的优势包括:

  • 以统一的方式跨 Azure 服务对用户进行身份验证
  • 在统一的位置管理密码策略和密码轮换
  • Microsoft Entra ID 支持多种形式的身份验证,无需存储密码
  • 客户可以使用外部 (Microsoft Entra ID) 组来管理数据库权限。
  • Microsoft Entra 身份验证使用 PostgreSQL 数据库角色在数据库级别对标识进行身份验证
  • 支持对连接到 Azure Database for PostgreSQL 的应用程序进行基于令牌的身份验证

若要配置和使用 Microsoft Entra 身份验证,请遵循以下过程:

  1. 根据需要,创建 Microsoft Entra ID,并使用用户标识进行填充。
  2. (可选)关联 Active Directory,或更改当前与 Azure 订阅关联的 Active Directory。
  3. 创建 Azure Database for PostgreSQL 服务器的 Microsoft Entra 管理员。
  4. 在映射到 Microsoft Entra 标识的数据库中创建数据库用户。
  5. 通过检索 Microsoft Entra 标识的令牌并登录,连接到数据库。

注意

若要了解如何创建和填充 Microsoft Entra ID,然后使用 Azure Database for PostgreSQL 配置 Microsoft Entra ID,请参阅为 Azure Database for PostgreSQL 配置和登录 Microsoft Entra ID

体系结构

以下概要图概述了对 Azure Database for PostgreSQL 使用 Microsoft Entra 身份验证进行身份验证的工作原理。 箭头表示通信路径。

authentication flow

管理员结构

使用 Microsoft Entra 身份验证时,有两个 PostgreSQL 服务器管理员帐户:原始 PostgreSQL 管理员和 Microsoft Entra 管理员。 只有 Microsoft Entra 帐户的管理员可以在用户数据库中创建第一个包含 Microsoft Entra ID 的数据库用户。 Microsoft Entra 管理员登录名可以是 Microsoft Entra 用户或 Microsoft Entra 组。 当管理员为组帐户时,可以由任何组成员使用,从而为 PostgreSQL 服务器启用多个 Microsoft Entra 管理员。 以管理员身份使用组帐户可便于集中添加和删除 Microsoft Entra ID 中的组成员,而无需更改 PostgreSQL 服务器中的用户或权限,从而提高了可管理性。 无论何时都仅可配置一个 Microsoft Entra 管理员(一个用户或组)。

admin structure

注意

服务主体或托管标识无法在单一服务器中充当功能齐全的 Microsoft Entra 管理员,此限制在我们的灵活服务器中已修复

权限

若要新建可使用 Microsoft Entra ID 进行身份验证的用户,必须在数据库中具有 azure_ad_admin 角色。 此角色是通过为特定 Azure Database for PostgreSQL 服务器配置 Microsoft Entra 管理员帐户来分配的。

若要创建新的 Microsoft Entra 数据库用户,必须以 Microsoft Entra 管理员身份进行连接。 为 Azure Database for PostgreSQL 配置 Microsoft Entra ID 并使用它登录中对此进行了演示。

只有在为 Azure Database for PostgreSQL 创建 Microsoft Entra 管理员后,才能进行任何 Microsoft Entra 身份验证。 如果已从服务器删除 Microsoft Entra 管理员,先前创建的现有 Microsoft Entra 用户将无法再使用其 Microsoft Entra 凭据连接到数据库。

使用 Microsoft Entra 标识进行连接

Microsoft Entra 身份验证支持使用 Microsoft Entra 标识连接到数据库的以下方法:

  • Microsoft Entra 密码
  • Microsoft Entra 集成
  • 使用 MFA 的 Microsoft Entra Universal
  • 使用 Active Directory 应用程序证书或客户端密码
  • 托管标识

执行 Active Directory 身份验证后,就可以检索令牌了。 此令牌是用于登录的密码。

请注意,目前仅 Microsoft Entra 用户角色支持管理操作,例如添加新用户。

注意

若要详细了解如何使用 Active Directory 令牌进行连接,请参阅为 Azure Database for PostgreSQL 配置 Microsoft Entra ID 并使用它登录

其他注意事项

  • 为了增强可管理性,建议将一个专用 Microsoft Entra 组预配为管理员。
  • 无论何时都只能为 Azure Database for PostgreSQL 服务器配置一个 Microsoft Entra 管理员(用户或组)。
  • 只有 PostgreSQL 的 Microsoft Entra 管理员才能最初使用 Microsoft Entra 帐户连接到 Azure Database for PostgreSQL。 Active Directory 管理员可以配置后续的 Microsoft Entra 数据库用户。
  • 如果已从 Microsoft Entra ID 中删除某个用户,此用户就无法再使用 Microsoft Entra ID 进行身份验证,所以也就无法再获取此用户的访问令牌。 在这种情况下,尽管匹配角色仍保留在数据库中,但无法使用此角色连接到服务器。

注意

在令牌到期前(自令牌颁发起最长 60 分钟后到期),仍可以使用已删除的 Microsoft Entra 用户进行登录。 如果你还从 Azure Database for PostgreSQL 中删除了用户,此访问权限会立即撤销。

  • 如果从服务器中删除 Microsoft Entra 管理员,那么服务器将不再与 Microsoft Entra 租户关联,因此也就会对服务器禁用所有 Microsoft Entra 登录。 从同一租户添加新的 Microsoft Entra 管理员将重新启用 Microsoft Entra 登录名。
  • Azure Database for PostgreSQL 使用用户的唯一 Microsoft Entra 用户 ID(而不是用户名)将访问令牌与 Azure Database for PostgreSQL 角色进行匹配。 也就是说,如果你在 Microsoft Entra ID 中删除 Microsoft Entra 用户,然后新建了一个同名用户,那么 Azure Database for PostgreSQL 会认为这是一个不同的用户。 因此,如果你从 Microsoft Entra ID 中删除用户,然后添加了一个同名的新用户,那么新用户将无法使用现有角色进行连接。 若要允许连接,Azure Database for PostgreSQL Microsoft Entra 管理员必须撤销用户的授权,然后向用户授予角色“azure_ad_user”来刷新 Microsoft Entra 用户 ID。

后续步骤