[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 メーリングリストの案内