假设你看到了这条消息:
FATAL: Ident authentication failed for user "..."
导致该错误信息的原因有哪些?
答案1
这意味着 Postgres 正在尝试使用 Ident 协议对用户进行身份验证,但无法成功。Ident auth 会自动将 Unix 用户名与 Postgres 用户名进行匹配。它的工作原理如下:
- 您在数据库“db”上拥有数据库角色“foo”
- 您的
pg_hba.conf
文件(在)将“Ident”定义为从某些主机连接的用户/etc/postgres-something/main
连接到数据库的协议db
- 建立连接的 unix 用户名是“foo”
- 用户连接的机器上运行的 Ident 服务器确认其用户名确实是“foo”
可能的原因和解决方法:
有没有 Ident 服务器运行在您尝试连接的机器上。通过尝试在端口 113 上连接它来测试。如果失败,请安装 Ident 服务器(例如
sudo apt-get install oidentd
)。有一个 Ident 服务器,但是没有数据库角色匹配您尝试连接的名称(上例中为“foo”)。因此,通过以超级用户权限连接到数据库并执行来创建它
CREATE ROLE foo
。或者将条目添加到/etc/postgresql/.../main/pg_ident.conf
(或/var/lib/pgsql/12/data
或任何地方)。可能是 shell 用户名不匹配数据库角色。您也许可以测试一下通过在连接过程中连接到 Ident 服务器并传递正确的端口号。
也许你真的想使用密码连接,而不是 Ident。
pg_hba.conf
适当编辑文件。例如,更改:host all all 127.0.0.1/32 ident
到
host all all 127.0.0.1/32 md5
更新文件后,请务必重新启动 Postgres pg_hba.conf
。您可以通过发出以下命令来执行此操作:
sudo service postgresql-12 restart
答案2
不确定原因,但这为我解决了这个问题:
在pg_hba.conf
更改为:
主机全部全部 127.0.0.1/32 md5
确切错误:Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"
答案3
对于 Centos 7,更改配置文件至以下:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all peer
#host replication all 127.0.0.1/32 ident
#host replication all ::1/128 ident
答案4
尝试使用 -h127.0.0.1而不是 -h本地主机