host=localhost, psql -h localhostを指定すると接続できない場合の対処方法 †この問題を発見したのは、CakePHPをインストールしdatabase.phpのhostにlocalhostを指定すると接続できなかったことが発端で調査しました。 PHPのpg_connect()関数でhost=localhostを指定した時と、psql -h
localhostを指定したとき、Ident認証に失敗しましたが出力されPostgreSQLに接続できない場合の事象について記述します。 追記 関連記事 †環境説明&構築 †環境はCentOS、yumコマンドによりPostgreSQL8.4をインストールしました。 以下の手順によりデータベースユーザを作成してデータベースを作成しました。 データベースユーザの追加 †
データベースの作成 †sakuraユーザにてデータベースfooを作成しpsqlによる接続確認を行いました。 [sakura@centos ~]$ createdb foo [sakura@centos ~]$ psql foo psql (8.4.9) "help" でヘルプを表示します. foo=# \q PHPのpg_connect()関数による接続 †PHPのデータベース接続関数 pg_connect() の引数にhost=localhostに設定するとエラーになりました。 以下のPHPスクリプトで接続しようとするとエラーとなりPostgreSQLに接続できない。 [sakura@centos ~]$ cat pg_connect_ng.php <?php if (!($cn = pg_connect("host=localhost dbname=foo user=sakura password=xxxxxxxx"))) { echo "connect error\n"; } else { echo "connect ok\n"; } ?> [sakura@centos ~]$ php pg_connect_ng.php PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: ユーザ"sakura"のIdent認証に失敗しました in /home/sakura/pg_connect_ng.php on line 2 Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: ユーザ"sakura"のIdent認証に失敗しました in /home/sakura/pg_connect_ng.php on line 2 connect error 以下のhost=localhostを削除したPHPスクリプトはPostgreSQLに接続できた。 [sakura@centos ~]$ cat pg_connect_ok.php <?php if (!($cn = pg_connect("dbname=foo user=sakura password=xxxxxxxx"))) { echo "connect error\n"; } else { echo "connect ok\n"; } ?> [sakura@centos ~]$ php pg_connect_ok.php connect ok psql -h localhost foo で接続してもエラー †psql fooでは正常に接続できていたのが、-h localhostを指定すると接続できないことを確認。 [sakura@centos ~]$ psql -h localhost foo psql: FATAL: ユーザ"sakura"のIdent認証に失敗しました pg_hba.confを修正しlocalhost指定の接続を可能にする †以下の編集および操作は全てrootユーザにて行いました。 /var/lib/pgsql/data/pg_hba.confファイルののIPv4 local connections:を以下のように修正しました。
ident を trustに変更しました。 以下のようにすればパスワードが必要になります。 # IPv4 local connections: host all all 127.0.0.1/32 password 以下のコマンドでPostgreSQLを再起動します。 /etc/init.d/postgresql restart または service postgresql restart sakuraユーザにsuし、以下のコマンドおよびPHPスクリプトを実行してみます。
localhostを指定して接続できるようになりました。 調査結果のまとめ †
備考 †本資料は、CakePHPをインストールしdatabase.phpのhostにlocalhostをしてすると接続できなかったので調査した資料です。 |