首页 > 解决方案 > PDO 在 Postgres 上使用什么样的身份验证?

问题描述

我尝试使用以下代码连接到我的数据库:

Db::$dbh = new PDO("pgsql:dbname=$db;host=$host;port=$port", $user, $pass, $opt);

它失败了:

致命:用户“postgres”的身份验证失败

当我在命令行上使用相同的凭据时,它工作正常:

psql -h127.0.0.1 -Upostgres --password -ddatabase1 -p5432
Password for user postgres: 
psql (10.5)
Type "help" for help.

database1=# 

为什么 PDO 使用身份验证,即使我明确使用用户名和密码?

更新我发现命令行在localhost用作主机名时也会失败。显然127.0.0.1localhost不可互换。

标签: phppostgresqlauthenticationpdo

解决方案


localhost用作主机时,PDO(或 Postgres?)可能使用 IPv6 进行连接。我的那行是这样的pg_hba.conf

host    all             all             ::1/128                 ident

所以,这就是ident使用的原因。


推荐阅读