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

标签 php linux postgresql-9.2

我的大部分 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/

相关文章:

php - 在数据库中存储类常量(用作位掩码)?

java - 如何使用先前在 mySQL 和 Android PHP 中选择的列表名称下拉表的所有行

linux - 使用 shell 脚本将用户的输入 URL 附加到文件中的变量

linux - fatal error : pthread. h:没有那个文件或目录

arrays - 在postgresql中将列从字符串更改为字符串数组

php - 在 Symfony2 中包含用户自定义函数的最佳实践

PHP & MySQL,良好的查询失败

在 linux 中创建文件时选择 BSD 或 sys5 风格

arrays - 将日期和整数合并到 ARRAY 中

sql - pg_stat_statements 的时间范围是多少