[PHP-users 13062] Re: PHP+PostgreSQLに特定のIPのみ接続させる

Katsuyuki Maeda php-users@php.gr.jp
Wed, 05 Feb 2003 21:53:26 +0900


 前田@nanetです。

On Wed, 05 Feb 2003 18:36:37 +0900
Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:

> パスワードを隠す方法には7.3から.pgpassにパスワードを定義
> できるようになりました。
> 
> http://osb.sra.co.jp/PostgreSQL/7.3/changes.html

 便利そうだと思って、早速試してみたのですが、残念ながら、
PHPからは 7.3.1では使えない様です。

 どちらかというと、PostgreSQL関係の話題ですが、
せっかく教えて頂いて、調べたのでまとめておきます。

--------
[PHP-users 2665] PHPからデータベースを使うと他のユーザの
DBも触れるのだけど、どうすると良いでしょう。
  http://ns1.php.gr.jp/pipermail/php-users/2001-October/002672.html

[PHP-users 2668] suexec使っても、ソースを読まれるとパスワードが
見えてしまう。
 (PHP側の)ユーザー認証を接続に利用すると良いのではないか。

(補足)同じホストでDBが動いているのであれば、ユーザー権限そのもの
で認証ができますが、他のホストで動いている場合は、パスワード等の
方法で認証する必要があります。

[PHP-users 2670] suexec使うとして、スクリプト自体にパスワードを
書かず、別ファイルに記述して読み込む。

[PHP-users 2674] 環境変数で渡す方法を使う

[PHP-users 2678] 環境変数はシステムによっては他のユーザーから
読み出すことができて危険という指摘。

[PHP-users 2681] 環境変数だと実際に読み出せる

 しばらく間が空いて、

[PHP-users 12961] PostgreSQL データベース認証の話題

[PHP-users 13055] .pgpass が使える様になった。HOME
ディレクトリに置いたファイルにパスワードが記述できる。

 .pgpassのフォーマットは、
  http://developer.postgresql.org/docs/postgres/libpq-files.html
 にある通り、
  hostname:port:database:username:password
 の形式。パーミッションは0600にしないと意味が無い。
  (参考:[pgsql-jp: 28628])

 7.3.1 ではPHPで動作しない理由は、libpq側のバグで、パスワード引数が
NULLだった時に.pgpassを読み出す様にしたのだけど、PHP4はPQconnectDBで、
コネクションストリングを渡していて、パスワードとして空文字列が
渡ってしまい、これはNULLと等しくないので、結果としてデフォルト
パスワードが使われるという事情の様です。

 詳しくは、
  http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/interfaces/libpq/fe-connect.c
 をご覧下さい。

-- 
Nagasaki Network Service (http://www.nanet.co.jp/)
 kei@nanet.co.jp <Katsuyuki Maeda> (http://www.nanet.co.jp/~kei/)
 kei-neverread@nanet.co.jp (for spam ONLY ゴミ箱直行便)
「終わらないプロジェクトはない。終わっちゃうプロジェクトはあるけど。」