psql:错误:连接到套接字“/var/run/postgresql/.s.PGSQL.5432”上的服务器失败:致命:用户“postgres”的对等身份验证失败(Ubuntu)

Jim*_*ode 65 postgresql ubuntu

当我尝试psql使用此命令打开时:

psql -U postgres
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"
Run Code Online (Sandbox Code Playgroud)

但当我使用时它连接成功:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下发生了什么以及如何诊断/解决这个问题吗?我的pg_hba.conf包含以下内容:


# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
Run Code Online (Sandbox Code Playgroud)

小智 45

您可以使用编辑器以特权编辑.conf文件,就我而言,它是 nano。

$sudo nano /etc/postgresql/14/main/pg_ident.conf
Run Code Online (Sandbox Code Playgroud)

通过添加此行来映射您的用户

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
user1           <computer-username>     postgres
Run Code Online (Sandbox Code Playgroud)

将 替换<computer-username>为系统用户名,可以使用whoami命令找到该用户名。在您的终端中输入:

$whoami
Run Code Online (Sandbox Code Playgroud)

然后以权限进入pg_hba.conf

$sudo nano /etc/postgresql/14/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

使用 method=peer 添加您的 postgres 用户,如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer
Run Code Online (Sandbox Code Playgroud)

这对我有用。

  • 将“$sudo nano /etc/postgresql/14/main/pg_hba.conf”行“local all postgres peer”从“peer”更改为“trust”,然后“systemctl restart postgresql@14-main.service”,它对我有用。 (28认同)
  • `local all postgres md5` 将使密码真正起作用。“信任”模式永远不会要求输入密码。 (6认同)
  • 我不知道上述解决方案的含义是什么,但它对我有用,谢谢。 (2认同)

Lau*_*lbe 40

对等身份验证意味着仅当数据库用户名与操作系统用户名相同时才允许连接。

psql -U postgres因此,如果您以操作系统用户root或 身份运行jimmy,它将不起作用。

您可以在 中指定操作系统用户和数据库用户之间的映射pg_ident.conf


use*_*054 7

我试图通过添加这样的地图来回答有关使用 /etc/postgresql/14/main/pg_ident.conf 的问题:

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
user1             <computer-username>               postgres
Run Code Online (Sandbox Code Playgroud)

然后将以下代码添加到 /etc/postgresql/14/main/pg_hba.conf 中:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用。然后我阅读了这个文档并找到了解决方案!只需使用 map=user1 将映射引用添加到 pg_hba.conf 即可:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer map=user1
Run Code Online (Sandbox Code Playgroud)