允许无密码的“对等”身份验证,但要求其他用户输入密码

允许无密码的“对等”身份验证,但要求其他用户输入密码

我认为有一个简单的 Postgres 身份验证要求,但我无法弄清楚如何pg_hba.conf使其发挥作用。

我有一个名为的数据库用户(角色)dbuser,它是受密码保护的数据库的所有者adb。有一个名为的对应 Unix 用户dbuser。Unix 用户dbuser应该能够adb在没有密码的情况下连接到,所有其他 Unix 用户都应该能够通过使用角色dbuser并提供数据库密码进行连接。即

sudo -u dbuser psql -U dbuser adb

不需要数据库密码,但是

sudo -u any_other_user psql -U dbuser adb

应该需要数据库密码。

入口pg_hba.conf

local adb dbuser peer

在第一种情况下有效,但在第二种情况下失败(psql:FATAL:用户“dbuser”的对等身份验证失败)。我理解原因,但无法找出正确的规则来做我想做的事情。仅限 Unix 套接字连接(本地)。如果有所不同,请使用 Postgres 9.2。

答案1

PostgreSQL 当前的身份验证方案无法实现您的期望。当peer身份验证失败时,PostgreSQL 不会转到 中的下一个条目pg_hba.conf。仅使用第一个条目,如果失败,则拒绝连接。peer如果用户 ID 不匹配,该模式不提供回退到密码身份验证的选项。

所以你不能这样做。抱歉。你能想到的最接近的方法是使用local(unix 套接字) 连接进行peer身份验证,并要求其他客户端通过 TCP/IP ( host) 套接字进行md5身份验证。使用不同的协议可以为每个客户端选择不同的身份验证方法。

我最近提议对 pgsql-hackers 上的身份验证行为进行更改,如果我能说服人们这是一个好主意,那么在以后的版本中可能会允许你想要的操作。基本上,如果身份验证失败,该peer模式将采用一个md5_fallback选项,允许它向客户端请求密码peer

相关内容