我的大部分 PHP/PostgreSQL 开发都是在 Windows 7 下完成的,但我正在迁移到 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');
最佳答案
将您的 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 套接字(建议,更快)或通过 TCP/IP 连接到 postgres。 pg_hba.conf
中第一行和第二行是socket相关的,第三行是ipv4的,第四行是ipv6的。如果您在代码中指定了 localhost,那么您将通过 TCP/IP (ipv4) 进行连接,这就是它不起作用并询问您密码的原因。
如果您仅使用 psql -U postgres
通过控制台连接,则您使用的是 unix 套接字,这就是它无需密码即可工作的原因。
别担心,即使更改了配置,也只有本地连接才能获得无密码访问权限。
关于php - 在 postgres 用户上设置密码是否意味着即使将 pg_hba.conf 设置为信任也需要密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702835/