我在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');
答案 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,这就是没有密码的原因。
请不要担心,即使配置已更改,也只会授予本地连接访问权限,但无密码。