1

我在 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');
4

1 回答 1

5

将您更改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

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

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

或者,您可以尝试像这样更改您的 php 代码:

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

即使对pg_hba.conf.

解释:

您可以通过 unix 套接字(建议,更快)或通过 TCP/IP 连接到 postgres。in 的第一行和第二行pg_hba.conf是相对于 socket 的,第三行是相对于 ipv4 的,第四行是相对于 ipv6 的。如果您在代码中指定 localhost,那么您是通过 TCP/IP (ipv4) 连接的,这就是它不起作用并询问您密码的原因。

如果您通过控制台仅使用 连接psql -U postgres,则您使用的是 unix 套接字,这就是它在没有密码的情况下工作的原因。

不用担心,即使更改了配置,也只会授予本地连接访问权限而无需密码。

于 2013-07-17T17:55:29.207 回答