【问题标题】:How peer authentication and psql's -U option work together?对等身份验证和 psql\ 的 -U 选项如何协同工作?
【发布时间】:2022-09-30 20:38:04
【问题描述】:

我的集群配置为在本地连接上使用对等身份验证,即described,如下所示:

对等身份验证方法通过获取客户端的 来自内核的操作系统用户名并将其用作允许的 数据库用户名(带有可选的用户名映射)。

因此,如果我尝试连接到未以用户身份登录的数据库集群,其名称在数据库角色之间具有对应关系,我将收到预期的错误:

john@john:~$ psql -d postgres
psql: error: FATAL:  role \"john\" does not exist

另一方面,有psql\'s -U username 选项,enables 我们

以用户用户名而不是默认用户名连接到数据库。 (当然,您必须获得许可才能这样做。)

但是当我用这个选项重复我之前的步骤时,我得到的错误有点不同(那里有名字的角色postgres)

john@john:~$ psql -d postgres -U postgres
psql: error: FATAL:  Peer authentication failed for user \"postgres\"

我的问题是关于对等身份验证和-U 选项如何协同工作。似乎如果我使用后者,服务器不再对我的客户端的操作系统用户名感兴趣(在相反的情况下,我会看到第一个错误)。但是在什么基础上我又不允许连接数据库呢?

可能是由于对等身份验证,它不仅仅是将 OS/-U 用户名与 PostgreSQL 角色匹配,而且还完全限制了某些操作系统用户访问数据库(因此,操作系统用户 john 可以\即使通过提供 PostgreSQL 服务器实际知道的名称也无法获得它 - postgres)

我做对了吗?

    标签: postgresql


    【解决方案1】:

    有两个不同的用户名:

    • 您用于登录数据库机器的操作系统用户的名称

    • 您使用-U 指定的数据库用户的名称

    如果这两个名称相同,则只能使用对等身份验证进行连接。

    出于高级目的,您可以在pg_ident.conf 中指定一个映射,该映射定义了哪个 OS 用户可以连接为哪个 DB 用户。

    【讨论】:

      【解决方案2】:

      如果您设置了一个用户映射(在 pg_ident.conf 中)并激活它(在 pg_hba.conf 中),它说 john 可以作为 postgres 登录,那么他将能够做到这一点。

      如果任何 OS 用户都可以无条件地以任何 PG 用户身份登录,那么“peer”与“trust”有何不同?

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2023-02-05
        • 2013-06-30
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        • 2013-06-02
        • 2011-11-19
        • 2018-11-30
        相关资源
        最近更新 更多