我刚刚从 Fedora 36 上的 repos 安装了 postgresql 和 pgadmin。我设置了初始 postgres 角色和数据库,并使用 postgres 用户登录
sudo su - postgres
psql
从那里,我使用加密密码设置了一个新用户:CREATE ROLE john WITH ENCRYPTED PASSWORD '123';
我还将这一行添加到我的pg_hba.conf
:
host all all 127.0.0.1/32 scram-sha-256
现在,从 unix 开始,作为 root 用户,如果我尝试: psql -U john -W -h 127.0.0.1
,我会收到此错误:
psql: error: connection to server at "127.0.0.1", port 5432 failed: FATAL: Ident authentication failed for user "john"
pgadmin 也无法登录数据库并显示类似的错误消息。
但是,如果我进入pg_hba.conf
并禁用此行:
host all all 127.0.0.1/32 ident
突然之间,我可以从 pgadmin 和psql -U john -W -h 127.0.0.1
root 用户的命令登录。
难道我做错了什么?为什么我需要完全禁用 ident auth 才能正常工作?我没有看到任何强制密码验证的方法,而不是来自 psql 客户端或 pgadmin 的 ident 验证。
编辑 - 这是我的 pg_hba.conf:
local all all peer
#host all all 127.0.0.1/32 ident
host all all ::1/128 ident
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
host all all 127.0.0.1/32 scram-sha-256
这基本上是来自 repos 的 postgres 附带的默认设置,但我:
- 注释掉
ident
一行 - 添加了最后一行
现有的 ident 规则任何 ipv4 本地连接(来自 127.0.0.1)
如果规则匹配任何连接尝试,那么这就是它使用的身份验证类型,即使身份验证失败,也不使用文件下方的规则。
https://www.postgresql.org/docs/current/auth-pg-hba-conf.html
换句话说,您需要为要使用其他东西的客户端连接禁用 ident。
您所做的不一定是错误的,但您可能希望仅对 root 用户启用它。
您可能还想为 ::1 创建一个匹配的 IPv6 规则,以防某些软件使用它。