PostgreSQL

pg_hba.conf

ホストベース認証設定ファイル

クライアント認証に関する情報を持つファイルです。5つのフィールドにそれぞれ値を定義する事で、PostgreSQLデータベースへの接続を許可または拒否することができます。このファイルでは、どのユーザがどのデータベースにどのような方法で接続できるかを定義します。

ファイルの存在場所

クライアントのアドレスと、ユーザ名(ロール名)の組み合わせにて接続できるDBを制限する事ができます。通常$PGDATA環境変数に設定されているディレクトリに存在します。

-bash-4.2$ cd $PGDATA
-bash-4.2$ pwd
/var/lib/pgsql/14/data
-bash-4.2$ ls -l pg_hba.conf
-rw-------. 1 postgres postgres 4855  2月 25 19:33 pg_hba.conf
-bash-4.2$

以下5つのフィールドにて構成されています。それぞれのフィールドは、1つ以上の空白文字(スペースやタブ)で区切られ、コメント行では’#’以降のテキストが無視されます。以下にその代表的なフィールド設定値について解説します。

各フィールドの解説
No. フィールド名 設定値 解説
1 TYPE local localhostでの接続が対象
host TCP/IPを使った接続(リモート接続)をSSL、非SSL何れでも可能
hostssl リモート接続にSSLを求めます。TLSのバージョンについてはpostgresql.conf内のssl_min_protocol_versionで制御する
hostnossl リモート接続に非SSLを求めます。(SSLでは接続できない)
DATABASE all 全てのデータベースが対象
replication ストリーミングレプリケーション属性のデータベース。(レプリケーションを使わない場合は意味なし)
データベース名 指定データベースのみを対象
USER all 全てのユーザに対し接続許可
接続許可ユーザ名 カンマ区切りで複数ユーザの指定も可能
ADDRESS 空白 TYPE列がlocalの場合よく空白にしていますが、(この場合localhost接続のみ許可するという意味)type列がlocal以外の場合は、クライアントアドレスに制限を設けないという意味
samehost 接続元のホストがデータベースサーバーと同じホストである場合にのみ接続を許可。通常localhostで接続しているところにipアドレス指定で接続する場合にこの設定が生きる
METHOD trust 接続は無条件に許可される
reject ある特定のクライアントからの接続を拒否する場合に使用
md5 ユーザのパスワードを検証するために、SCRAM-SHA-256あるいはMD5認証を実行します。
postgresql.confにpassword_encryption = scram-sha-256と記載されている場合はpostgresql.confの値が優先されます。ただしクライアント側がscram-sha-256を対応していない場合はmd5認証になります。
scram-sha-256 ※Ver.10からサポートされはじめたようです。
ユーザのパスワードを検証するためにSCRAM-SHA-256認証を利用する。

 

password クライアントに対して認証時に平文のパスワードを要求する(SSLを使わないと簡単にスニッフィングできてしまうので社内システムといえどよくないですね)
具体例

以下はssl接続であれば、クライアントのIPアドレスに制限なく全てのデータベース、全てのユーザがmd5ハッシュ化パスワード認証での接続が可能。ただし192.168.3.1/24からの接続については、非SSLでの接続が可能。
、、、という意味となります。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
hostssl    all           all             0.0.0.0/0               md5
host       all           all             192.168.3.1/24          md5

postgresql.conf

スポンサーリンク