pg_hba.conf 有问题

Ste*_*and 2 postgresql configuration postgresql-9.1

这是我的配置:

#postgres.conf:

listen_addresses = 'localhost'

#pg_hba.conf:

local all postgres md5
local all appuser trust
local all devuser trust
local all all peer
Run Code Online (Sandbox Code Playgroud)

我正在使用 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, but md5,所以无论如何我都会拥有 .pgpass 文件。但我想知道)

Erw*_*ter 5

我可以看到人们可能认为listen_addresses = 'localhost'与身份验证方法有什么关系local。但事实并非如此。我引用手册listen_addresses

listen_addresses(字符串)

指定服务器侦听来自客户端应用程序的连接的TCP/IP 地址

以及手册中pg_hba.conf文件一章:

当地的

此记录匹配使用Unix 域套接字的连接尝试。如果没有这种类型的记录,则不允许 Unix 域套接字连接。

大胆强调我的。

对于通过localhost(TCP/IP、本地环回)的连接,您实际上需要在您的文件中为身份验证方法host输入一个条目pg_hba.conf(而不是用于local)。