这是我的配置:
#postgres.conf:
listen_addresses = 'localhost'
#pg_hba.conf:
local all postgres md5
local all appuser trust
local all devuser trust
local all all peer
我正在使用 C-Library 在本地连接libpq
。我的连接字符串是:
host=localhost user=appuser dbname=mydbname port='5432'
但是,除非我的开发人员用户 (devuser)(启动与 libpq 链接的应用程序的人)的家中有一个 .pgpass 文件,否则我的可执行文件无法连接,我会收到错误消息fe_sendauth : no password supplied
正如我所说,如果 .pgpass 文件在这里,那么它可以连接。
我不明白的是:我配置local all appuser
了 trust。为什么我同样需要一个 .pgpass 文件?
(这本身并不是一个严重的问题,因为稍后出于安全措施,它将不再位于trust
, 但是md5
,所以无论如何我都会拥有 .pgpass 文件。但我想知道)
我可以看到人们可能会如何认为
listen_addresses = 'localhost'
与身份验证方法有关local
。但事实并非如此。我引用手册listen_addresses
:以及手册中的
pg_hba.conf
文件一章:大胆强调我的。
对于通过
localhost
(TCP/IP,本地环回)的连接,您实际上需要在文件中输入身份验证方法host
pg_hba.conf
(而不是 forlocal
)。