无法连接到 PostgreSQL 服务器:致命:用户 "postgres" 的对等身份验证失败
Unable to connect to PostgreSQL server: FATAL: Peer authentication failed for user "postgres"
如何从 admin 访问 postgres 数据库?
我已经更改了用户 postgres
:
的密码
$ sudo -u postgres psql
$ postgres=# alter user postgres password 'secret';
结果:
ALTER ROLE
但我仍然在管理员上收到此错误:
Unable to connect to PostgreSQL server: FATAL: Peer authentication failed for user "postgres"
知道为什么吗?
我有这两个用户:
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | Superuser, Create role, Create DB | {}
但我在使用此命令创建用户 root
时没有设置密码:
sudo -u postgres createuser --interactive
输出(为什么不要求输入密码?):
Enter name of role to add: root
Shall the new role be a superuser? (y/n) y
但我仍然收到管理员错误:
Unable to connect to PostgreSQL server: FATAL: Peer authentication failed for user "root"
编辑:
这是我的一些 pg_hba.conf
sudo nano /etc/postgresql/9.5/main/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 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
我把peer
改成ident
:
# Database administrative login by Unix domain socket
local all postgres ident
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
然后重启我的机器。但仍然没有运气。
看起来您正在使用 "peer authentication" 而您希望使用 "password authentication"。使用默认 pg_hba.conf,您可以通过指定主机名或“127.0.0.1”来切换到密码验证。
我的答案来自 here:
local all postgres md5
然后重启服务:
sudo systemctl restart postgresql.service
如何从 admin 访问 postgres 数据库?
我已经更改了用户 postgres
:
$ sudo -u postgres psql
$ postgres=# alter user postgres password 'secret';
结果:
ALTER ROLE
但我仍然在管理员上收到此错误:
Unable to connect to PostgreSQL server: FATAL: Peer authentication failed for user "postgres"
知道为什么吗?
我有这两个用户:
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | Superuser, Create role, Create DB | {}
但我在使用此命令创建用户 root
时没有设置密码:
sudo -u postgres createuser --interactive
输出(为什么不要求输入密码?):
Enter name of role to add: root
Shall the new role be a superuser? (y/n) y
但我仍然收到管理员错误:
Unable to connect to PostgreSQL server: FATAL: Peer authentication failed for user "root"
编辑:
这是我的一些 pg_hba.conf
sudo nano /etc/postgresql/9.5/main/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 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
我把peer
改成ident
:
# Database administrative login by Unix domain socket
local all postgres ident
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
然后重启我的机器。但仍然没有运气。
看起来您正在使用 "peer authentication" 而您希望使用 "password authentication"。使用默认 pg_hba.conf,您可以通过指定主机名或“127.0.0.1”来切换到密码验证。
我的答案来自 here:
local all postgres md5
然后重启服务:
sudo systemctl restart postgresql.service