psql:致命:用户的对等身份验证失败

Dan*_*iel 15 postgresql authentication postgresql-9.4 pg-hba.conf

我刚刚在 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.
Run Code Online (Sandbox Code Playgroud)

...和倾听。

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
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能将用户myuser连接到数据库mydatabase

dez*_*zso 17

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

local   all             all              peer
Run Code Online (Sandbox Code Playgroud)

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

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

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

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