【问题标题】:In PostgreSQL , can certificate authentication and basic authentication(username/password authentication) co-exist at one time?在 PostgreSQL 中,证书认证和基本认证(用户名/密码认证)可以同时存在吗?
【发布时间】:2025-11-22 10:55:01
【问题描述】:

我们能否为相同的客户端 IP 地址同时为 PostgreSQL 配置基本身份验证和证书身份验证。 我认为不是,因为它们是两种不同的身份验证机制,不能同时共存......因为如果我们配置证书身份验证,那么它不能使用用户名密码进行身份验证,而只能使用证书进行身份验证。

请帮忙。

【问题讨论】:

    标签: postgresql postgresql-10 postgresql-11 postgresql-12


    【解决方案1】:

    是的,这是正确的 - 对于给定的连接,您只能使用一种身份验证方法。

    【讨论】:

      【解决方案2】:

      是的,您可以将clientcert 与任何身份验证方法一起指定。所以md5 clientcert=verify-full 需要证书和密码。

      verify-full 仅在 v12 中引入。在此之前,您只能检查证书是否有效签名,而不能检查证书上的 CN 是否与声明的用户名匹配。

      【讨论】:

      • 在 PostgreSQL 中,可以在 2 个地方 (1) 配置 SSL 用于连接 (2) 身份验证。我的问题是关于此证书身份验证,而不是连接级别。 PostgreSQL 支持多种身份验证方法..其中我们有基本身份验证,即用户名/密码身份验证和证书身份验证也是一个选项。此链接讨论证书身份验证-postgresql.org/docs/12/auth-cert.html。所以我的问题是我们能否同时配置证书身份验证和基本身份验证。我认为没有。请澄清
      • 我直接回答了您的问题,是的,您可以两者兼得,并演示了如何操作。还需要说明什么?
      • 我浏览了您在 clientcert 上提供的链接。除了 usrname 和 password 之外,它还谈到了使用 SSL 保护连接(这是我在前面的评论中提到的 (1) 点)。所以在任何给定的时间,我认为,我们不能同时拥有证书身份验证和用户名/密码身份验证......因为在证书身份验证中,我们不一定需要提供用户名和密码
      【解决方案3】:

      我自己试过。 在 pg_hba.conf 文件中,我们可以为一组 IP 地址设置 MD5 验证,为另一个 IP 地址范围设置证书。 所以 1 个 Postgres 服务器可以为 2 个不同的 IP 地址解决 2 个不同的身份验证

      【讨论】:

        最近更新 更多