本地用户的MD5身份验证

时间:2017-10-12 15:23:11

标签: postgresql

PostgreSQL 10.0,Ubuntu 16.04

我希望localhost上的用户使用密码登录。 为此,我将md5的规则移到了顶部。

SHOW hba_file;

postgres=# # TYPE  DATABASE        USER            ADDRESS                 METHOD
postgres-# 
postgres-# # IPv4 local connections:
postgres-# host    all             all             127.0.0.1/32            md5
postgres-# # "local" is for Unix domain socket connections only
postgres-# local   all             all                                     peer
postgres-# # IPv6 local connections:
postgres-# host    all             all             ::1/128                 md5
postgres-# # Allow replication connections from localhost, by a user with the
postgres-# # replication privilege.
postgres-# local   replication     all                                     peer
postgres-# host    replication     all             127.0.0.1/32            md5
postgres-# host    replication     all             ::1/128                 md5

然后重新启动服务:

sudo service postgresql restart

问题:

michael@michael-HP:~$ psql -U admin -W
Password for user admin: 
psql: FATAL:  Peer authentication failed for user "admin"

你能帮助我理解为什么我的md5设置不起作用吗?

1 个答案:

答案 0 :(得分:1)

manual page for psql州:

  

如果省略主机名,psql将通过Unix域套接字连接到本地主机上的服务器,或通过TCP / IP连接到没有Unix域套接字的机器上的localhost。

因此,如果您的服务器正在侦听域套接字以及TCP / IP,则您所建立的连接将为local类型,如the pg_hba.conf manual page所述。

因此,它将匹配此行:

local   all             all                                     peer

这将尝试使用"peer authentication", as described here

你应该:

  • 将该行更改为对本地(域 - 套接字)连接进行md5身份验证。
  • 使用psql / -h 127.0.0.1--host 127.0.0.1命令中指定主机名,以强制使用TCP / IP。
  • unix_socket_directories设置为空字符串described in the configuration section of the manual,完全禁用Unix域套接字。