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设置不起作用吗?
答案 0 :(得分:1)
如果省略主机名,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域套接字。