Postgres 错误消息:致命:用户“...”的身份验证失败

Ste*_*ett 40 postgresql linux authentication

假设您看到此消息:

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

出现此错误消息的原因是什么?

Ste*_*ett 54

这意味着 Postgres 正在尝试使用 Ident 协议对用户进行身份验证,但不能。Ident auth 自动将 Unix 用户名与 Postgres 用户名匹配。它是这样工作的:

  • 您在数据库“db”上拥有数据库角色“foo”
  • 您的pg_hba.conf文件 (in /etc/postgres-something/main) 将“Ident”定义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. 也许您实际上想使用 password而不是 Ident进行连接pg_hba.conf适当地编辑文件。例如,更改:

    host all all 127.0.0.1/32 ident
    
    Run Code Online (Sandbox Code Playgroud)

    host all all 127.0.0.1/32 md5
Run Code Online (Sandbox Code Playgroud)

确保在更新pg_hba.conf文件后重新启动 Postgres 。您可以通过发出以下命令来做到这一点:

    sudo service postgresql-12 restart
   
Run Code Online (Sandbox Code Playgroud)

  • 对于fedora,文件在`/var/lib/psql/data` (5认同)

jac*_*des 9

不确定原因,但这为我解决了这个问题:

pg_hba.conf

改成这样:

托管所有所有 127.0.0.1/32 md5

确切的错误: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"


小智 5

对于 Centos 7,将pg_hba.conf更改为以下内容:

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