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

Joe*_*ams 4 postgresql fedora

在 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
Run Code Online (Sandbox Code Playgroud)

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

local   foo         foo                               md5
Run Code Online (Sandbox Code Playgroud)

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

psql: FATAL:  Ident authentication failed for user "foo"
Run Code Online (Sandbox Code Playgroud)

在我可以通过 md5 登录到 'foo' 之前,我必须删除第一个本地行(它有 ident)。

如何在保持身份验证的同时为“foo”启用 md5 身份验证?

Dev*_*tas 6

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

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

(所以尝试颠倒顺序 - 将您添加的行放在顶部)