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 用户名匹配。它是这样工作的:
pg_hba.conf文件 (in /etc/postgres-something/main) 将“Ident”定义db为用于从某些主机连接的用户连接到数据库的协议可能的原因和解决方法:
有没有的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 服务器并传递正确的端口号来测试这一点。
也许您实际上想使用 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)
不确定原因,但这为我解决了这个问题:
在 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)