hello foo bar Saba note | PostgreSQLでリモートホストで接続する

PostgreSQLでリモートホストで接続する

2019.10.24 (木)

PostgreSQLにリモートホストから接続する方法です。インストール時のデフォルトではlocalhostのみの接続ができるようになっていますが、リモートホスト側の設定はされていません。

リモートホストからDBサーバーへのネットワークの確認

まずはリモートホスト側からDBサーバーへアクセスしてみます。nmapなどで通信自体とポートの確認をしておきます。
PortチェックテストのようなWEBツールもあります。

$ nmap TARGET_HOST
...
5432/tcp open     postgresql
...

疎通できない場合は複数の原因が考えられるので、Firewallの設定やPostgreSQLのサービスの起動などいろいろ確かめる必要があります。今回この部分は割愛。

postgresql.confの修正

リモートホストからlistenできるようにします。

#listen_addresses = 'localhost'
↓
listen_addresses = '*'

pg_hba.confの修正

ここではクライアントのホストIPに対してどの認証とネットワークセグメントで通すかというのを書いてあげるだけです。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.0.3          scram-sha-256   ← 追加

TYPE,DATABASE,USER,ADDRESS,METHODでそれぞれの項目を設定します。

TYPE

TYPE には local , host , hostssl , hostnossl のいずれか 1 つを設定します。 local は Unix ドメインソケットを使用する場合に使用されるもので、今回は Windows 環境なので使用しません。 host 、 hostssl 、 hostnossl はいずれも TCP/IP を使った接続を行う場合に使用し、 host を指定した場合は SSL または非 SSL での接続、 hostssl を使った場合は SSL での接続、 hostnossl は非 SSL での接続を許可します。

DATABASE

USER

ADDRESS

METHOD

METHODの部分で指定できるident trust peer md5 scram-sha-256 rejectというのがあります。

接続テスト

簡単なコードを書いて接続テストしてみます。try to connect postgresql. object(PDO)#1 (0) { } Success! connected!みたな感じでobject(PDO)#1が取得できたらOKです。

<?php
$DBHOST = "127.0.0.1";
$DBPORT = "5432";
$DBNAME = "SOMEDATABASE";
$DBUSER = "SOMEUSER";
$DBPASS = "foobar"";
try {
  $dbh = new PDO("pgsql:host=$DBHOST;port=$DBPORT;dbname=$DBNAME;user=$DBUSER;password=$DBPASS");
  var_dump($dbh);
  echo "Success! connected!\n";
} catch (PDOException $e) {
  echo($e."\n");
}