在postgres用户上设置密码是否意味着即使将pg_hba.conf设置为信任,也需要密码?

时间:2013-07-17 14:41:08

标签: php linux postgresql-9.2

我在Windows 7下完成了大部分PHP / PostgreSQL开发,但我正在迁移到Linux。我最近在Debian Wheezy上安装了PHP和PostgreSQL,并且很难用postgres用户连接到我的PostgreSQL数据库。我在stackoverflow上发现了一条帖子,据说要做以下事情:

template1=# ALTER USER postgres WITH PASSWORD 'password';

最初,对于密码,我使用了一个无效的空字符串。接下来我使用了一个文本字符串,它允许我通过pg_connect()连接。

经过更多研究后,我发现改变pg_hba.conf文件并让postgres用户信任我真正想做的事情......在进行此更改时,如果没有提供密码,我仍然会收到错误通过pg_connect()为postgres用户,所以我的问题是:

使用密码更改postgres用户是否会导致pg_connect()需要密码,即使身份验证方法设置为信任?当我通过命令行使用:

连接时
psql -U postgres

我没有问题......使用pg_connect()通过PHP连接时会出现问题。

pg_hba.conf文件:

local   all             postgres                                trust
local   all             all                                     trust
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

PHP连接线:

pg_connect('host=localhost dbname=dev user=postgres');

1 个答案:

答案 0 :(得分:3)

将您的pg_hba.conf更改为:

local   all             postgres                                trust
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust

这将允许您无需密码即可连接。

请记住在编辑pg_hba.conf后重新启动(或重新加载)postgresql。

另外,您可以尝试更改您的PHP代码:

pg_connect('dbname=dev user=postgres');

即使不对pg_hba.conf进行任何更改,这也应该有效。

<强>解释

您可以通过unix socket(建议,更快)或通过TCP / IP连接到postgres。 pg_hba.conf中的第一行和第二行是相对于socket,第三行是ipv4,第四行是ipv6。如果在代码中指定了localhost,则通过TCP / IP(ipv4)进行连接,这就是它无效的原因,并且它会向您询问密码。

如果您只是通过控制台与psql -U postgres连接,那么您正在使用unix socket,这就是没有密码的原因。

请不要担心,即使配置已更改,也只会授予本地连接访问权限,但无密码。