在 PostgreSQL 中启用 ident 和 md5 身份验证

在 PostgreSQL 中启用 ident 和 md5 身份验证

在Fedora 12上,我为自己设置了一个测试数据库,pg_hba.conf默认包含以下内容:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

我想启用 md5 登录,以便名为“foo”的 PostgreSQL 用户可以访问名为“foo”的数据库。但是,当我添加此行并重新启动 postgres 时:

local   foo         foo                               md5

使用我的常规用户帐户运行 psql -U'foo' 仍然会产生以下消息:

psql: FATAL:  Ident authentication failed for user "foo"

我必须先删除第一个本地行(具有 ident),然后才能通过 md5 登录到“foo”。

我怎样才能为‘foo’启用 md5 身份验证,同时保留现有的身份身份验证?

答案1

https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html表示条目的顺序很重要,具体来说:

由于每次连接尝试都会按顺序检查 pg_hba.conf 记录,因此记录的顺序非常重要。通常,较早的记录将具有严格的连接匹配参数和较弱的身份验证方法,而较晚的记录将具有较宽松的匹配参数和较强的身份验证方法。例如,有人可能希望对本地 TCP/IP 连接使用信任身份验证,但对远程 TCP/IP 连接则需要密码。在这种情况下,为来自 127.0.0.1 的连接指定信任身份验证的记录将出现在为更广泛的允许客户端 IP 地址指定密码身份验证的记录之前。

(因此尝试反转顺序 - 将要添加的行放在顶部)

相关内容