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


Answers:


36

这意味着Postgres尝试使用Ident协议对用户进行身份验证,但不能。身份验证的工作方式如下:

  • 您在数据库“ db”上具有数据库角色“ foo”
  • 您的pg_hba.conf文件(中的/etc/postgres-something/main)将“ Ident”定义db为从某些主机进行连接的用户连接到数据库的协议
  • 进行连接的Unix用户名是'foo'
  • 用户连接到的计算机上运行的Ident服务器确认其用户名确实是'foo'

可能的原因和解决方案:

  1. 没有的Ident服务器,你想从连接在机器上运行。通过尝试在端口113上进行连接进行测试。如果失败,请安装一个Ident服务器(例如sudo apt-get install oidentd)。
  2. 有一个Ident服务器,但是没有数据库角色与您尝试连接的名称匹配(上例中为'foo')。因此,可以通过具有超级用户权限的某种方式将其连接到数据库来创建数据库,然后执行do CREATE ROLE foo。或者,将条目添加到/etc/postgresql/.../main/pg_ident.conf
  3. 外壳程序用户名可能数据库角色不匹配。您可以通过在连接进行时连接到Ident服务器并传递正确的端口号来进行测试。
  4. 也许您实际上想使用密码而不是Ident连接。pg_hba.conf适当地编辑文件。例如,更改:

    host all all 127.0.0.1/32 ident
    

    host all all 127.0.0.1/32 md5
    

2
对于fedora,文件位于/var/lib/psql/data
Anwar

我想没有人愿意回答为什么postgres使用“ ident”作为默认登录名吗?
icc97 '17

因为这在20年前是有道理的,而* nix却没有变化?:)
史蒂夫·贝内特

@ icc97,此答案中没有任何内容表示“ ident”是Postgres的默认登录名;你从哪里得到这个主意的?据我所知,Postgres集群中默认的超级用户角色名称是“ postgres”。
通配符

9

不知道原因,但这对我来说是固定的:

pg_hba.conf

更改为此:

托管所有所有127.0.0.1/32 md5

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


1
更改“ ident”->“ md5”对我
有用

3

在CentOS上,将以下行添加到/var/lib/pgsql/9.3/data/pg_hba.conf

host all all 127.0.0.1/32 trust

并注释掉其他条目。

当然,此设置并不安全,但是如果您只是在像我这样的开发虚拟机上搞砸,那可能就可以了...


0

如果尚未尝试过,请查看pg_hba.conf文件。它将被命名为/var/lib/pgsql/9.3/data/pg_hba.conf(Fedora 20); 您可能必须使用'find / -name pg_hba.conf'来找到它。

在文件底部,将“ METHOD”值更改为“ trust”以进行本地测试(有关完整信息,请参见postgres文档)。重新启动计算机,以确保一切均已开始干净并读取新的参数。

希望这可以解决您的麻烦。它使用PostgreSQL 9.3解决了我在Fedora 20上的问题。


更改PostgreSQL配置时,不必重新引导整个计算机。而是尝试pg_ctl reload从控制台使用,或者SELECT pg_reload_conf();以特权用户身份执行SQL时使用。
Benjwadams 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.