pg_hba.confファイルの設定方法
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 など)を意味します。
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 ロールのパスワードを入力してください。
いったん PostgreSQL との接続を終了してから、今度は postgres データベースに接続してみます。次のように実行してください。
psql -U postgres -d postgres
このように pg_hba.conf ファイルで接続を許可したデータベースへは接続が行えましたが、許可を行っていないデータベースへ接続しようとするとエラーとなりました。
( Written by Tatsuo Ikura )
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。
JavaDrive ©2006-2026 Buzzword Inc.. All Rights Reserved.