Microsoft Entra 身份验证是一种使用 Microsoft Entra ID 中定义的标识连接到 Azure Database for PostgreSQL 的机制。 使用 Microsoft Entra 身份验证,可以在中心位置管理数据库用户标识和其他 Azure 服务,从而简化权限管理。
使用 Microsoft Entra ID 的好处包括:
- 以统一的方式在 Azure 服务中对用户进行身份验证。
- 在单个位置管理密码策略和密码轮换。
- 支持多种形式的身份验证,这可以消除存储密码的需要。
- 客户使用外部(Microsoft Entra ID)组管理数据库权限的能力。
- 使用 PostgreSQL 数据库角色在数据库级别对标识进行身份验证。
- 支持连接到 Azure Database for PostgreSQL 的应用程序基于令牌的身份验证。
Microsoft Entra ID 在 Azure Database for PostgreSQL 中的工作原理
以下高级关系图总结了将 Microsoft Entra 身份验证与 Azure Database for PostgreSQL 配合使用时身份验证的工作原理。 箭头指示通信路径。
- 应用程序可以从 Azure 实例元数据服务标识终结点请求令牌。
- 使用客户端 ID 和证书时,会调用 Microsoft Entra ID 来请求访问令牌。
- JSON Web 令牌 (JWT) 访问令牌由 Microsoft Entra ID 返回。 应用程序在调用服务器时发送访问令牌。
- 服务器使用 Microsoft Entra ID 验证令牌。
有关使用 Azure Database for PostgreSQL 配置 Microsoft Entra ID 的步骤,请参阅 为 Azure Database for PostgreSQL 配置和登录 Microsoft Entra ID。
PostgreSQL 管理员与 Microsoft Entra 管理员之间的差异
以Microsoft Entra 管理员身份为Microsoft Entra 主体启用Microsoft Entra 身份验证时,帐户:
- 获取与原始 PostgreSQL 管理员相同的权限。
- 可以管理服务器上的其他Microsoft Entra 角色。
PostgreSQL 管理员可以仅创建基于本地密码的用户。 但是,Microsoft Entra 管理员有权管理 Microsoft Entra 用户和本地基于密码的用户。
Microsoft Entra 管理员可以是Microsoft Entra 用户、Microsoft Entra 组、服务主体或托管标识。 以管理员身份使用组帐户可增强可管理性。 它允许集中添加和删除Microsoft Entra ID 中的组成员,而无需更改 Azure Database for PostgreSQL 实例中的用户或权限。
可以同时配置多个Microsoft Entra 管理员。 可以将密码身份验证停用到 Azure Database for PostgreSQL 实例,以提高审核和符合性要求。
Microsoft通过 Azure 门户、API 或 SQL 创建的 Entra 管理员拥有与在服务器预配期间创建的常规管理员用户相同的权限。 你可以管理非admin Microsoft Entra 角色的数据库权限,这与常规角色类似。
与 Microsoft Entra 标识的连接
Microsoft Entra 身份验证支持以下方法来使用 Microsoft Entra 标识连接到数据库:
- Microsoft Entra 密码身份验证
- Microsoft Entra 集成身份验证
- 使用多重身份验证Microsoft Entra 通用
- Active Directory 应用程序证书或客户端机密
- 托管标识
对 Active Directory 进行身份验证后,检索令牌。 此令牌充当登录的密码。
若要使用 Azure Database for PostgreSQL 配置 Microsoft Entra ID,请按照 配置和登录 Azure Database for PostgreSQL 的 Microsoft Entra ID 中的步骤作。
其他注意事项
将 Microsoft Entra 身份验证与 Azure Database for PostgreSQL 配合使用时,请记住以下几点:
- 若要让 Microsoft Entra 主体在任何部署过程中都假定用户数据库的所有权,请在部署(Terraform 或 Azure 资源管理器)模块中添加显式依赖项,以确保在创建任何用户数据库之前启用Microsoft Entra 身份验证。
- 可以随时将多个 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 主体,它将保留为 PostgreSQL 角色,但无法再获取新的访问令牌。 在这种情况下,尽管数据库中仍然存在匹配的角色,但它无法向服务器进行身份验证。 数据库管理员需要手动转移所有权并删除角色。
注释
已删除Microsoft Entra 用户仍可登录,直到令牌过期(令牌颁发最多 60 分钟)。 如果还从 Azure Database for PostgreSQL 中删除用户,则会立即撤销此访问权限。
- Azure Database for PostgreSQL 使用用户的唯一Microsoft Entra 用户 ID(而不是使用用户名)匹配数据库角色的访问令牌。 如果删除Microsoft Entra 用户并创建同名的新用户,Azure Database for PostgreSQL 会认为其他用户。 因此,如果从 Microsoft Entra ID 中删除用户并添加具有相同名称的新用户,则新用户无法与现有角色连接。
常见问题
Azure Database for PostgreSQL 中提供了哪些身份验证模式?
Azure Database for PostgreSQL 支持三种身份验证模式:仅 PostgreSQL 身份验证、仅Microsoft Entra 身份验证,以及 PostgreSQL 和 Microsoft Entra 身份验证。
是否可以在服务器上配置多个 Microsoft Entra 管理员?
是的。 可以在服务器上配置多个Microsoft Entra 管理员。 在预配期间,只能设置单个Microsoft Entra 管理员。 创建服务器后,可以通过转到“ 身份验证 ”窗格来设置任意数量的 Microsoft Entra 管理员。
Microsoft Entra 管理员是否只是Microsoft Entra 用户?
否。 Microsoft Entra 管理员可以是用户、组、服务主体或托管标识。
Microsoft Entra 管理员是否可以创建本地基于密码的用户?
是的。 Microsoft Entra 管理员可以管理 Microsoft Entra 用户和本地基于密码的用户。
在服务器上启用Microsoft Entra 身份验证时会发生什么情况?
在服务器级别设置Microsoft Entra 身份验证时,将启用 PGAadAuth 扩展,服务器将重启。
如何使用 Microsoft Entra 身份验证登录?
可以使用 psql 或 pgAdmin 等客户端工具登录到服务器。 使用 Microsoft Entra 用户 ID 作为用户名,Microsoft Entra 令牌作为密码。
如何生成令牌?
用于
az login
生成令牌。 有关详细信息,请参阅 检索Microsoft Entra 访问令牌。组身份验证与单个身份验证有何区别?
以 Microsoft Entra 组成员身份登录和以个人Microsoft Entra 用户登录的唯一区别在于用户名。 以单个用户身份登录需要单个Microsoft Entra 用户 ID。 以组成员身份登录需要组名称。 在这两种情况下,使用与密码相同的单个Microsoft Entra 令牌。
令牌生存期是什么?
用户令牌最长有效期为 1 小时。 系统分配的托管标识的令牌最长有效期为 24 小时。