ホストベース認証設定ファイル
クライアント認証に関する情報を持つファイルです。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では接続できない) | ||
2 | DATABASE | all | 全てのデータベースが対象 |
replication | ストリーミングレプリケーション属性のデータベース。(レプリケーションを使わない場合は意味なし) | ||
データベース名 | 指定データベースのみを対象 | ||
3 | USER | all | 全てのユーザに対し接続許可 |
接続許可ユーザ名 | カンマ区切りで複数ユーザの指定も可能 | ||
4 | ADDRESS | 空白 | TYPE列がlocalの場合よく空白にしていますが、(この場合localhost接続のみ許可するという意味)type列がlocal以外の場合は、クライアントアドレスに制限を設けないという意味 |
samehost | 接続元のホストがデータベースサーバーと同じホストである場合にのみ接続を許可。通常localhostで接続しているところにipアドレス指定で接続する場合にこの設定が生きる | ||
5 | 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