我有我认为是一个简单的Postgres身份validation要求,但我不知道pg_hba.conf咒语使其工作。
我有一个名为dbuser的数据库用户(angular色),它是受密码保护的数据库adb的所有者。 有一个相应的Unix用户名为dbuser 。 Unix用户dbuser应该能够连接到adb而不需要密码,所有其他Unix用户应该能够使用dbuserangular色连接并提供数据库密码。 即
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”的对等身份validation失败)。 我明白为什么,但无法弄清楚正确的规则去做我想做的事情。 只有Unix套接字连接(本地)。 Postgres 9.2如果有所作为。
PostgreSQL当前的authenticationscheme无法满足您的要求。 当peerauthentication失败时,PostgreSQL不会进入pg_hba.conf的下一个条目。 只有第一个条目被使用,如果失败,连接被拒绝。 如果用户标识不匹配,则peer模式不提供返回到密码authentication的选项。
所以你不能这样做。 抱歉。 您可以使用local (unix套接字)连接与peer身份validation并要求其他客户端通过具有md5身份validation的TCP / IP( host )套接字连接。 使用不同的协议可以为每个协议select不同的身份validation方法。
我最近提出了对pgsql-hacker的身份validation行为的更改,如果我能说服人们这是一个好主意,那么这个行为可能允许你在以后的版本中使用。 基本上,对peer模式将采取一个md5_fallback选项,如果peerauthentication失败,它将允许从客户端请求密码。