phpでexecを用いてpsqlを動かす際にパスワードを与える方法について

投稿者: Anonymous

phpでexecを用いてpsqlを動かそうとしました。

$cmd = '/usr/pgsql-9.3/bin/psql -U testuser example -c "SELECT * FROM test LIMIT 1"';
exec($cmd);

すると、

$ php -f test.php
Password for user testuser:

とパスワード入力を求めるプロンプトが表示されてしまいます。

パスワードを渡す方法が知りたいです。
なお、サーバの設定は変更できません。

解決

パスワードを指定しなかった時に、特定のテキストファイル内容を参照する仕組みが Postgresql にはあります。

  • PostgreSQL 9.3.2 スワードファイル http://www.postgresql.jp/document/9.3/html/libpq-pgpass.html


    ユーザのホームディレクトリの.pgpassまたはPGPASSFILEで設定されるファイルは、接続にパスワードが必要な場合(かつ、他に指定されたパスワードが無かった場合)に使用するパスワードを格納するファイルです。

    Unixシステムにおいて、.pgpassの権限はグループ、他者へのアクセスをすべて拒否しなければなりません。 これはchmod 0600 ~/.pgpassといったコマンドによって行います。 権限をこれよりも緩くすると、このファイルは無視されます。 Microsoft Windowsにおいては、このファイルが安全なディレクトリに格納されていることを前提としていますので、特別に行われる権限の検査はありません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *