Dar*_*son 1 php linux postgresql-9.2
我已经在 Windows 7 下完成了大部分 PHP/PostgreSQL 开发,但正在迁移到 Linux。我最近在 Debian Wheezy 上安装了 PHP 和 PostgreSQL,并且在使用 postgres 用户连接到我的 PostgreSQL 数据库时遇到了困难。我在 stackoverflow 上找到了一篇文章,上面说要执行以下操作:
template1=# ALTER USER postgres WITH PASSWORD 'password';
Run Code Online (Sandbox Code Playgroud)
最初,对于密码,我使用了一个空字符串,但没有用。接下来我使用了一个文本字符串,它允许我通过 pg_connect() 进行连接。
经过更多研究后,我发现更改 pg_hba.conf 文件并使 postgres 用户受信任确实是我想要做的......在进行此更改时,当未通过 pg_connect( 提供密码) 时,我仍然遇到错误) 对于 postgres 用户,所以我的问题是:
即使身份验证方法设置为信任,使用密码更改 postgres 用户是否会导致 pg_connect() 需要密码?当我使用以下命令通过命令行连接时:
psql -U postgres
Run Code Online (Sandbox Code Playgroud)
我没有问题...问题开始于使用 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
Run Code Online (Sandbox Code Playgroud)
PHP连接线:
pg_connect('host=localhost dbname=dev user=postgres');
Run Code Online (Sandbox Code Playgroud)
将您更改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
Run Code Online (Sandbox Code Playgroud)
这将允许您无需密码即可连接。
请记住在编辑后重新启动(或重新加载)postgresql pg_hba.conf。
或者,您可以尝试像这样更改您的 php 代码:
pg_connect('dbname=dev user=postgres');
Run Code Online (Sandbox Code Playgroud)
即使对pg_hba.conf.
解释:
您可以通过 unix 套接字(建议,更快)或通过 TCP/IP 连接到 postgres。第一行和第二行pg_hba.conf是相对于socket的,第三行是ipv4,第四行是ipv6。如果您在代码中指定 localhost,则您是通过 TCP/IP (ipv4) 连接的,这就是为什么它不起作用并询问您密码的原因。
如果您仅通过控制台使用 连接psql -U postgres,则您使用的是 unix 套接字,这就是它无需密码即可工作的原因。
不用担心,即使更改了配置,也只会授予本地连接访问权限,无需密码。