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

svujldwt  于 2022-12-17  发布在  PostgreSQL
关注(0)|答案(4)|浏览(2239)

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

psql -U postgres

我得到这个错误:

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"

但当我使用以下命令时,它连接成功:

sudo -u postgres psql

有人能解释一下发生了什么以及如何诊断/修复这个问题吗?我的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
brgchamk

brgchamk1#

您可以使用编辑器编辑您的**.conf**文件,对于我的情况,它是nano。

$sudo nano /etc/postgresql/14/main/pg_ident.conf

通过添加以下行Map您的用户

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
user1             <computer-username>               postgres

<computer-username>替换为System-Username,可以使用whoami命令找到该用户名。键入您的终端:

$whoami

然后转到pg_hba.conf

$sudo nano /etc/postgresql/14/main/pg_hba.conf

使用method=peer添加postgre用户,如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer

这对我很有效。

fjnneemd

fjnneemd2#

Peer authentication表示仅当数据库用户名与操作系统用户名相同时才允许连接。
因此,如果您以操作系统用户rootjimmy的身份运行psql -U postgres,它将无法工作。
您可以在pg_ident.conf中指定操作系统用户和数据库用户之间的mapping

krcsximq

krcsximq3#

step-1 
vi /etc/postgresql/14/main# vi postgresql.conf

listen_addresses = '*'

step-2  

vi /etc/postgresql/14/main# vi 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             0.0.0.0/0            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

step-3
sudo /etc/init.d/postgresql restart

step-4
After restart your changes
create your required database and database username
uoifb46i

uoifb46i4#

我不认为在生产中你会费心去改变任何文件。
所以,你可以做的是暂时使用户名相同的用户名,你的postgres通常是postgres通过传递命令sudo -i -u postgres,然后psql,现在你成功地连接到postgres.

相关问题