PostgreSQL の標準設定では、セキュリティを考慮し、UNIXドメインソケットによる接続しか許可されていません。つまり、リモートホストから PostgreSQL へ接続することはできません。また、ローカルホストの場合でも JDBC インターフェースによる接続のように、tcpip_socket を有効にしないと接続できない場合もあります。リモートホストからの接続を許可するには、$PGDATA/postgresql.conf ファイルを修正して tcpip_socket を有効にする必要があります。さらに、リモートホストから接続するには、クライアント認証設定ファイルである $PGDATA/pg_hba.conf ファイルを編集する必要もあります。これらの設定手順は以下の通りです。
![]() | postgresql.conf は、PostgreSQL 7.1 から導入されたファイルで、PostgreSQL のデーモンである postmaster の起動オプションを指定することができます。postmaster の引数へ直接オプションを指定することもできますが、postgresql.conf での調整を推奨します。 |
$PGDATA/postgresql.conf ファイルの以下の行を探します。
#tcpip_socket = false |
標準では、false になっていますので、以下のように on または true に変更し、コメントの # をはずします。
tcpip_socket = on |
次に、アクセスを許可するホストを指定します。
標準では、以下のようにローカルホストからの接続のみ許可される設定となっています。しかし、すべてのデータベースユーザーからの接続が許可されています。
local all all trust host all all 127.0.0.1 255.255.255.255 trust |
all は、すべてのデータベースに適用されることを意味し、trust は PostgreSQL に設定したどのデータベースユーザーを使用しても無条件に接続を許可することを意味します。
例えば、特定のホスト(192.168.10.1)からのアクセスを許可するには、以下の1行を追加します。
host all all 192.168.10.1 255.255.255.255 trust |
特定のネットワークアドレス(192.168.10.0)を持つホストからのアクセスを許可するには、以下の 1 行を追加します。
host all all 192.168.10.0 255.255.255.0 trust |
全てのホストからのアクセスを許可するには、以下の1行を追加します。
host all all 0.0.0.0 0.0.0.0 trust |
![]() | 実際には、データベースに対してパスワードによる認証を行うことを推奨します。pg_hba.conf の詳細は、PostgreSQL オフィシャルマニュアルを参照してください。 |
編集終了後は、設定を反映するために PostgreSQL の再起動が必要です。
以下のコマンドを root で実行します。
# /etc/init.d/postgresql restart |
これで、PostgreSQL へのリモート接続が可能となります。