pg_hba.confファイルの設定方法

pg_hba.conf ファイルは PostgreSQL に接続するクライアントの認証に関する設定を記述するファイルです。ここでは PostgreSQL の環境で pg_hba.conf ファイルを設定する方法について解説します。

(Last modified: )

pg_hba.confファイルの場所

pg_hba.conf は postgresql.conf と同じくデフォルトでは PostgreSQL をインストールしたディレクりの中の data ディレクトリの中に格納されています。

pg_hba.confファイルの場所(1)

pg_hba.conf ファイルはテキストファイルですので内容を確認したり編集したりする場合はテキストエディタでファイルを開いてください。

pg_hba.confファイルの場所(2)

pg_hba.confの設定

pg_hba.conf ファイルではクライアントのアドレスとロール名を指定してどのデータベースに対して接続を許可するのかを設定するために使用します。現在 pg_hba.conf で設定されている内容を確認すると次のようになっています。

# TYPE  DATABASE        USER          ADDRESS               METHOD

# IPv4 local connections:
host    all             all           127.0.0.1/32          md5
# IPv6 local connections:
host    all             all           ::1/128               md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all           127.0.0.1/32          md5
host    replication     all           ::1/128               md5

1 行につき 1 つの設定が行われています。例えば次の設定では、クライアントのIPアドレスが 127.0.0.1/32 のすべてのロールに対してレプリケーションを除くすべてのデータベースへ認証方式 md5 を使って接続を許可するという意味になります。

# IPv4 local connections:
host    all             all           127.0.0.1/32          md5

※ 127.0.0.1/32 というのはローカルループバックアドレスと呼ばれるアドレスで自分自身を表す IP アドレスとなります。この場合は PostgreSQL が動作しているサーバの IP アドレスです。 localhost も同じ意味で使われます。なお IPv6のローカルループバックアドレスは ::1/128 です。

それでは設定する項目について一つ一つ見ていきます。

各設定は次のいずれかの形式となります。

local      DATABASE  USER  METHOD  [OPTIONS]
host       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
hostssl    DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
hostnossl  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]

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

DATABASE には接続を許可するデータベース名を指定します。複数指定する場合はカンマ(,)で区切って記述してください。また特別な値として all を指定した場合はレプリケーションを除くすべてのデータベースを意味し、 sameuser を指定した場合はユーザー名と同じ名前のデータベースを意味します。また samerole を指定した場合は接続するユーザーが接続するデータベースと同じ名前のロールのメンバーである必要があります。別のファイルにデータベース名のリストを記述した場合は @ファイル名 の形式で指定することもできます。

USER には接続を許可するロール名を指定します。複数指定する場合はカンマ(,)で区切って記述してください。また特別な値として all を指定した場合はすべてのロールを意味します。またロール名の前に + を付けるとグループとして使われているロール名を意味します。この場合このグループとしてのロールのメンバーになっているロールに接続が許可されます。別のファイルにロール名のリストを記述した場合は @ファイル名 の形式で指定することもできます。

ADDRESS には接続を許可するホスト名またはIPアドレスの範囲を指定します。IPアドレスは IPv4 で指定する場合は 172.20.143.0/24 のような形式、また IPv6 で指定する場合は fe80::7a31:c1ff:0000:0000/96 のような形式で指定します。また特別な値として all を指定した場合はすべてのIPアドレスを意味し、 samehost と指定した場合は PostgreSQL が動作しているサーバと同じ IP アドレスを意味します。 samenet と指定した場合はサーバと同じネットワークを意味します。

ADDRESS でホスト名を指定する場合、 hoge.example.com のように個別のホスト名を指定します。また .example.com のように指定した場合は example.com のすべてのホスト( hoge.example.com など)を意味します。

METHOD には認証方式を指定します。設定する値と認証方式は次を参考にしてください。

trust          任意のロール名でパスワードなしで接続可能
reject         接続をすべて拒否
scram-sha-256  パスワード認証、最も安全だが一部クライアントで未サポート
md5            パスワード認証
password       パスワード認証、パスワードを平文で送信
gss            GSSAPI を利用したシングルサインオン
sspi           SSPI を利用したシングルサインオン
ident          Ident認証
peer           Peer認証
ldap           LDAP認証
radius         RADIUS認証
cert           SSLクライアント証明書を使った認証
pam            PAM認証
bsd            BSD認証

例えば 192.168.1.0/24 のネットワークからデータベース mydb への接続をユーザー yamada に対して認証方式 md5 で許可する場合は次のように記述します。

host  mydb  yamada  192.168.1.0/24  md5

なお pg_hba.conf ファイルでの設定内容に関係なく、 postgresql.conf ファイルの listen_addresses パラメータでクライアントの IPアドレスまたはホストが PostgreSQL への接続を許可されていなければ接続は行えません。「postgresql.confの設定」を参照されてください。

-- --

それでは実際に試してみます。現在クライアントの IP アドレスがサーバと同じ IP アドレスという状況で、 postgres ロール対して mydb データベースへのアクセスを許可してみます。もともと pg_hba.conf で設定されていた行はすべてコメントとした上で次の 1 行を追加しました。設定ファイルの保存が終わりましたら一度 PostgreSQL を再起動してください。

# TYPE  DATABASE        USER          ADDRESS               METHOD

# IPv4 local connections:
# host    all             all           127.0.0.1/32          md5
# IPv6 local connections:
# host    all             all           ::1/128               md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
# host    replication     all           127.0.0.1/32          md5
# host    replication     all           ::1/128               md5

host    mydb             postgres       127.0.0.1/32          md5

最初に先ほど接続を許可する設定をした mydb データベースに接続してみます。コマンドプロンプトを起動し、次のように実行してください。

psql -U postgres -d mydb

パスワードの入力待ちとなりますので、 postgres ロールのパスワードを入力してください。

pg_hba.confの設定(1)

mydb データベースへ接続が完了しました。

pg_hba.confの設定(2)

いったん PostgreSQL との接続を終了してから、今度は postgres データベースに接続してみます。次のように実行してください。

psql -U postgres -d postgres

次のようなエラーが表示されて接続に失敗しました。

pg_hba.confの設定(3)

このように pg_hba.conf ファイルで接続を許可したデータベースへは接続が行えましたが、許可を行っていないデータベースへ接続しようとするとエラーとなりました。

-- --

pg_hba.conf の設定方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。