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 ファイルはテキストファイルですので内容を確認したり編集したりする場合はテキストエディタでファイルを開いてください。
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 ロールのパスワードを入力してください。
mydb データベースへ接続が完了しました。
いったん PostgreSQL との接続を終了してから、今度は postgres データベースに接続してみます。次のように実行してください。
psql -U postgres -d postgres
次のようなエラーが表示されて接続に失敗しました。
このように pg_hba.conf ファイルで接続を許可したデータベースへは接続が行えましたが、許可を行っていないデータベースへ接続しようとするとエラーとなりました。
-- --
pg_hba.conf の設定方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。