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

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)

Lor*_*con 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
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 套接字,这就是它无需密码即可工作的原因。

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