LoginSignup
3
3

More than 5 years have passed since last update.

CentOS7でPDO使ってpostgresにつないでたら、"Ident authentication failed for user"ってエラーログが出た

Last updated at Posted at 2018-07-04

CentOS7でPDOを使ってpostgresqlにつないでたら、

[Sun Jul 01 18:28:19.399178 2018] [:error] [pid 2883] [client xxx.xxx.xxx.xxx] PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] FATAL:  Ident authentication failed for user "hogeuser"' in ...

っていう内容がエラーログに吐かれていました。

読んでの通り、「hogeuserってユーザ(postgresqlのユーザ)の認証が失敗しましたってことなんですが、

$db = new PDO("pgsql:dbname=hogedb;host=localhost;", "hogeuser", "hogepassword");

その時のコードはこの通り。
PHP公式ページの接続例とほとんど相違ありません
接続例url->
http://php.net/manual/ja/pdo.connections.php

こんな時はググってみようということで、エラーメッセージでググる。

Qiitaにこんな記事↓
https://qiita.com/pugiemonn/items/7ec47bc82bd56b0458b9

このブログで一つの解決策が
/var/lib/pgsql/9.5/data/pg_hba.confっていうファイルを書き換えればいいらしい。
でもこれは、hogeuserのパスワード認証を無効にするということ。
公開を目的としていないプログラムならいいが、公開を目的とするプログラムには適さない。

ベストソリューションはこちら。
https://blog.fkoji.com/2015/02260627.html

内容としては、
host=localhostの指定を外す
それだけ。

PDOからインスタンスを生成するときに渡すdsnにおいて、hostを指定しない場合はデフォルトでlocalhostが指定されるので、外しても問題なし。

というわけで、さっきのコードからhost=localhostを消してみる。

$db = new PDO("pgsql:dbname=hogedb;", "hogeuser", "hogepassword");

無事エラーを吐かず接続。select文とinsert文が実行できたことを確認。

パスワード認証をしたのはこれで初めてだったが、これにて一件落着!

同じようなエラーが出た場合は、ぜひ試してみてください。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3