Postgres 错误消息:严重:用户“…”的身份认证失败

Postgres 错误消息:严重:用户“…”的身份认证失败

假设你看到了这条消息:

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”

可能的原因和解决方法:

  1. 没有 Ident 服务器运行在您尝试连接的机器上。通过尝试在端口 113 上连接它来测试。如果失败,请安装 Ident 服务器(例如sudo apt-get install oidentd)。

  2. 有一个 Ident 服务器,但是没有数据库角色匹配您尝试连接的名称(上例中为“foo”)。因此,通过以超级用户权限连接到数据库并执行来创建它CREATE ROLE foo。或者将条目添加到/etc/postgresql/.../main/pg_ident.conf(或/var/lib/pgsql/12/data或任何地方)。

  3. 可能是 shell 用户名不匹配数据库角色。您也许可以测试一下通过在连接过程中连接到 Ident 服务器并传递正确的端口号。

  4. 也许你真的想使用密码连接,而不是 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本地主机

相关内容