[PHP-users 34691] Re: PostgreSQLへの接続が確立できない
NASUNO Isao
isao.nasuno @ ctc-g.co.jp
2009年 8月 5日 (水) 17:10:15 JST
那須野です。
> 他のWeb系の php からだとうまくいっているのでしたら別ですが、
> postgresqlのユーザーとして apache が登録されていますか?
PostgreSQLユーザには登録しておらず、接続時にユーザ名を指定しています。
相変わらず、件のサーバが手元にないのですが、
CentOS5.2のテスト環境でSELinuxをenforcingにしてみたら、同じ現象が出ました。
本機も enforcing に設定されていることが分かりましたので、
石井さんのご指摘のとおりなのだと思います。
皆さま、ご指摘ご助言、ありがとうございました。
ml1 @ k2street.com さんは書きました:
>
> 他のWeb系の php からだとうまくいっているのでしたら別ですが、
> postgresqlのユーザーとして apache が登録されていますか?
>
> あまりに基本的な確認ですみません。
>
>
> ----- Original Message ----- From: "NASUNO Isao" <isao.nasuno @ ctc-g.co.jp>
> To: <php-users @ php.gr.jp>
> Sent: Wednesday, August 05, 2009 9:13 AM
> Subject: [PHP-users 34686] Re: PostgreSQLへの接続が確立できない
>
>
>> 那須野です。
>>
>> ありがとうございました!
>> そのセンで調べてみます。
>>
>>
>> Tatsuo Ishii さんは書きました:
>>> ということは、SELinux絡みのような感じですね。
>>> SELinuxは詳しくないのですが、たとえばこれが参考にならないでしょうか。
>>>
>>> http://slashdot.jp/~shimashima/journal/450453?m=1
>>> --
>>> Tatsuo Ishii
>>> SRA OSS, Inc. Japan
>>>
>>>> 不勉強で、UNIX ドメインソケットについてよく分からないのですが、
>>>> PHPの設定などとは関係なく、PostgreSQLの設定ということでしょうか。
>>>> それらしい設定をPostgreSQLについて見てみると(今、マシンが手元にない
>>>> のですが)、
>>>>
>>>> - /tmp/.s.PGSQL...というファイルはできていました。
>>>> これが、UNIXドメインソケットを使っているということでしょうか。
>>>>
>>>> - /tmp は、drwxrwxrwt になっていたと思います。
>>>> なお、HTTPDはapacheユーザで起動していますが、ログインできないユー
>>>> ザとして
>>>> 定義しています。
>>>>
>>>> - pg_hba.conf
>>>> local all all trust としています。
>>>>
>>>>
>>>> Tatsuo Ishii さんは書きました:
>>>>> 石井と申します。
>>>>>
>>>>>> RedHat5の上で、Apache+PostgreSQL+PHPの開発をしています。
>>>>>> PostgreSQLへの接続が確立できないという状況に陥り、
>>>>>> 助言を求めたくて投稿した次第です。
>>>>>> CGIで動作するPHPだけが、PostgreSQLに接続できない状態です。
>>>>>>
>>>>>>
>>>>>> ●バージョン等
>>>>>> - Apache 2.2.3 (pre-install)
>>>>>> - PHP 5.2.5
>>>>>> - PostgreSQL 8.3.5 (自分でコンパイル)
>>>>>>
>>>>>> PHPは、CGI版としてコンパイルされているもので、
>>>>>> (株)オークニーさんが、MapServerという製品のCGIとして販売してい
>>>>>> るものです。
>>>>>> 通常のCGI版と、特に変わりはありません。
>>>>>>
>>>>>> ●ソース
>>>>>> 以下のような簡単なソースでテストしています。
>>>>>> テーブルのレコード数を出すだけです。
>>>>>> ----------------------------------------------------------------------------
>>>>>>
>>>>>> <?php
>>>>>> $link = pg_connect("dbname=DBNAME user=USER password=PASS
>>>>>> port=xxxx");
>>>>>> $rs=pg_exec("select col from table");
>>>>>> $ct=pg_numrows($rs);
>>>>>> print($ct);
>>>>>> pg_close($link);
>>>>>> ?>
>>>>>> ----------------------------------------------------------------------------
>>>>>>
>>>>>>
>>>>>> ●状況
>>>>>> 上記のソースをCGIとして実行させると、pg_connect() 実行時に、
>>>>>> 「Unable to connect to PostgreSQL server: could not create socket:
>>>>>> Permission denied」
>>>>>> というエラーが発生します。
>>>>>>
>>>>>> CGI版PHPを、インタラクティブモードで(-a オプションで)、
>>>>>> まったく同じ内容を実行させると、正常動作します。
>>>>>> なので、PostgreSQL側には問題なさそうです。
>>>>>> 実際、同じマシンでJAVA/JSPも使っているのですが、javaからの接続はで
>>>>>> きます。
>>>>>>
>>>>>>
>>>>>> Apache実行ユーザの環境と、インタラクティブモードで実行したユーザの
>>>>>> 環境の違いと
>>>>>> 思うのですが、どう解決してよいのかわかりません。
>>>>>> phpinfo(); を、CGI/インタラクティブモード の両者で実行した違いは、
>>>>>> 環境変数以外には違いがありませんでした。
>>>>> おそらくUNIXドメインソケットをソケットを作れる/作れないという、実
>>>>> 行ユー
>>>>>
>>>>> ザ権限の問題だと思います。ソケットを作るためのディレクトリ(デフォルト
>>>>> なら/tmp)のパーミッションはどうなっていますか?
>>>>>
>>>>> ちなみにJavaはINETドメインソケットを使っているので、今回のエラーは関係
>>>>> ないです。
>>>>> --
>>>>> Tatsuo Ishii
>>>>> SRA OSS, Inc. Japan
>>>>>
PHP-users メーリングリストの案内