psql:严重:用户的对等身份验证失败


12

我刚刚在Ubuntu 15.10上安装了PostgreSQL 9.4。

  1. 我创建了一个用户 createuser -P myuser
  2. 我创建了一个数据库 createdb -O myuser mydatabase
  3. 我编辑pg_hba.conf并添加了local mydatabase myuser md5
  4. 我用重新启动了PostgreSQL sudo service postgresql restart

用户myuser仅是PostgresSQL用户,在Ubuntu上没有用户帐户。

当我尝试使用连接数据库psql -W mydatabase myuser时失败psql: FATAL: Peer authentication failed for user "myuser"

PostgreSQL正在运行…

 postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

...和聆听。

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

与用户myuser连接到数据库mydatabase,我该怎么做?

Answers:


16

在几天前的全新安装中,我的第二行pg_hba.conf

local   all             all              peer

我相信这是使您的连接尝试失败的原因。

规则的顺序在这里很重要:将考虑与访问方法,用户名,数据库名称和源IP范围匹配的第一个规则。如果失败,则没有第二次尝试,因此连接尝试可能会失败。或者,如文档所述:

没有“失败”或“备份”:如果选择了一条记录并且认证失败,则不会考虑后续记录。如果没有记录匹配,则拒绝访问。

解决方案很容易:如果您不打算使用peer身份验证,则删除上面的行,或者将特定规则移到该行之上。


移动线工作。
丹尼尔(Daniel)

我们如何使用'md5'身份验证来存储密码,这样我们就不必一次又一次地输入密码...?
sk

3

首先...检查pg_hba.conf中是否有允许myuser用户使用的行。例如:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

或对IPV4(或IPv6,如果使用的话)的任何其他许可行:TYPE DATABASE USER ADDRESS METHOD

完成此检查后,按如下所示运行psql:

psql -h localhost -U myuser mydatabase

然后,在要求的提示下,输入用户的密码myuser。


1
当然,请删除对等身份验证。
Alvaro Neto

我更新了一个实例以允许远程连接,将侦听地址设置为'*'并添加了host all all 0.0.0.0/0 md5规则。不必删除对等身份验证。刚刚使用该-h localhost参数。最佳答案,因为您极有可能无需触摸库存安装上的配置。
马克·卡彭特(Marc Carpenter Jr)
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.