使用php连接PostgreSQL数据库时,密码md5验证失败


Password md5 authentication failed when trying to connect to PostgreSQL db with php

环境配置:

    Ubuntu 16.04.1
  • PostgreSQL 9.5.4
  • PHP 7.0

嗨,我尝试连接到我的postgresql db与php PDO

$DB_ADDR="127.0.0.1";
$DB_PORT="5432";
$DB_NAME="bddautfreq";
$DB_USR="postgres";
$DB_PWD="xxx";
try{
  $bdd=new PDO ("pgsql:host=".$DB_ADDR.";port=".$DB_PORT.";dbname='".$DB_NAME."'",$DB_USR,"'".$DB_PWD."'");
}
catch (Exception $e)
{
        die('Erreur connexion BDD: '.$e->getMessage());
}

但是这个错误发生了:

Erreur connexion BDD: SQLSTATE[08006] [7] FATAL: password authentication failed for user "postgres"

使用trust在我的pg_hba.conf文件中连接是ok的

host    all             all             127.0.0.1/32            trust

但不使用md5认证

host    all             all             127.0.0.1/32            md5

php7.0-pgsql模块已安装并启用:

gbdd@GBDD-HP:~$ ls /etc/php/7.0/mods-available/
calendar.ini  fileinfo.ini  iconv.ini    pdo.ini        phar.ini      shmop.ini    sysvsem.ini
ctype.ini     ftp.ini       json.ini     pdo_pgsql.ini  posix.ini     sockets.ini  sysvshm.ini
exif.ini      gettext.ini   opcache.ini  pgsql.ini      readline.ini  sysvmsg.ini  tokenizer.ini

我的postgresql.conf文件上的加密密码

psql连接正常

gbdd@GBDD-HP:~/bdd$ psql -U postgres -d bddautfreq
psql (9.5.4)
Type "help" for help.
bddautfreq=# 

我确定输入好的密码(与。pgpass相同)。对我来说,信任不是一个安全的解决方案。有人能帮助我了解我的apache, php或postgresql配置的错误吗?非常感谢!

您缺少php_pdo_pgsql.dll扩展名。

php.ini中添加

安装php-pgsql并启用它
extension=php_pdo_pgsql.dll

错误来自PHP端。所有的身份验证问题都来自于我在密码变量两边加的单引号。

在php5中,以下语法可以正常运行(我在其他服务器上使用的语法):

$bdd=new PDO ("pgsql:host=".$DB_ADDR.";port=".$DB_PORT.";dbname='".$DB_NAME."'",$DB_USR,"'".$DB_PWD."'");

但是在php7中,它需要像这样删除所有的"'":

$bdd=new PDO ("pgsql:host=".$DB_ADDR.";port=".$DB_PORT.";dbname=$DB_NAME,$DB_USR,$DB_PWD);

即使我发现了自己的错误,我还是要祝贺社区的快速支持!