Pgpool-II 3.6.26 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 第 6章クライアント認証 | 次のページ |
PostgreSQLのpg_hba.confと同じようにPgpool-IIでもpool_hba.confとよばれる設定ファイルを使った同様のクライアント認証機能をサポートしています。 Pgpool-IIをインストールするとデフォルトインストール先の設定ファイルディレクトリ("/usr/local/etc")にサンプルのpool_hba.conf.sampleが含まれています。 デフォルトではpool_hbaによる認証は無効になっており、enable_pool_hbaをonに設定することで有効になります。 enable_pool_hba設定パラメータをご覧ください。
pool_hba.confのフォーマットはPostgreSQLのpg_hba.confのものとほとんど同じです。 pool_hba.confファイルの一般的な書式は、1行につき1つのレコードというレコードの集合です。 空行はコメント用の#文字以降の文字と同じく無視されます。 レコードは行をまたいで続けることはできません。 レコードはスペースもしくはタブ、もしくはその両方で区切られた、複数のフィールドで構成されています。 フィールドには、フィールド値が二重引用符付きの場合空白文字を含むことができます。 データベース、ユーザもしくはアドレスフィールド内のキーワード(例:allまたはreplication)の一つを引用するとその特別な意味が失われ、その名称のデータベース、ユーザもしくはホストと一致するようになります。
それぞれのレコードは接続形式、(接続形式に対して意味を持つのであれば)クライアントのIPアドレス範囲、データベースの名前、ユーザ名およびこれらのパラメータに一致する接続で使用される認証方法を指定します。 接続形式、クライアントアドレス、要求されたデータベース、およびユーザ名に一致する最初のレコードが認証処理に使用されます。 「失敗時の継続」や、 あるいは「バックアップ」はありません。 これは、もしあるレコードが選択されて認証に失敗した場合、後続のレコードは考慮されないということです。 どのレコードも一致しない時はアクセスが拒否されます。
レコードは以下の書式のうちの1つの形式を取ります。
local database user auth-method [auth-options] host database user CIDR-address auth-method [auth-options]
フィールドの意味は以下のようになっています。
このレコードはUnixドメインソケットを使用する接続に対応します。 この種類のレコードを使用しないと、Unixドメインソケット経由の接続は拒否されます
このレコードは、TCP/IPを使用した接続に対応します。 hostレコードは、SSLもしくは非SSL接続のいずれかに対応します。
注意: サーバのデフォルトの動作は、ローカルループバックアドレスであるlocalhostのみTCP/IP接続を監視しています。 よってサーバにおいてlisten_addressesパラメータが適切な値に設定された状態で起動されていない限り、リモートのTCP/IP接続はできません。
このレコードで対応するデータベース名を指定します。 allという値は、全てのデータベースと対応することを指定します。
注意: databaseフィールド値として"samegroup"はサポートされません
Pgpool-IIはPostgreSQLバックエンドサーバにあるユーザ情報を事前に知る事ができないため、データベース名はpool_hba.confにあるdatabaseフィールドの項目のみと比較されます。
このレコードで対応するデータベースユーザ名を指定します。 allという値は、全てのユーザが対応することを指定します。 それ以外の場合には特定のデータベースユーザの名前となります。
注意: userフィールド値として"+"を使ったグループ指定はサポートされません
上記の"samegroup"と同じ理由で、ユーザ名は単純にpool_hba.confにあるuserフィールドの項目のみ対してチェックされます。
このレコードに対応しているクライアントマシンのアドレスを指定します。 IPアドレスの範囲は、範囲の開始アドレス、続いてスラッシュ(/)とCIDRマスクの長さという標準の数値表記で指定されます。 CIDRマスク長とは、クライアントIPアドレスが一致しなければならない、高位のビット数を表すものです。 指定するIPアドレスのこれより右側のビットには、0を指定しなければなりません。 IPアドレスと/、およびCIDRマスク長の間には空白を入れてはいけません。
注意: 現在、IPv6アドレス/マスク表記法はサポートされません
このフィールドはhostレコードにのみ適用されます。
接続がこのレコードに一致する場合に使用する認証方式を指定します。 使用できる選択肢は以下にまとめていますが、詳しく項6.2を参照してください。
接続を無条件で許可します。 この方式は、Pgpool-IIに接続できる全てのユーザを許可します。
接続を無条件に拒否します。 特定のホストをあるグループから「除外」するために便利です。 例えば、1行のrejectは特定のホストが接続することを拒否します。
クライアントに対して認証時に二重MD5ハッシュ化パスワードを要求します。
注意: md5認証を使うには、ユーザ名とパスワードをpool_passwdというパスワードファイルに登録する必要があります。 詳細は項6.2.2を参照してください。
オペレーティングシステムによって提供されるPAM(Pluggable Authentication Modules)サービスを使用した認証です。 詳細は項6.2.3を参照してください
Pgpool-IIが稼働するホスト上のユーザ情報を使ったPAM認証を利用することができます。 PAMサポートを有効にするには、Pgpool-IIが"--with-pam"をつけてconfigureされていなければなりません。
PAM認証を有効にするには、Pgpool-IIのサービス設定ファイルをシステムのPAM設定ディレクトリ(通常は"/etc/pam.d"にあります)に作成しなければなりません。 サービス設定ファイルのサンプルはインストールディレクトリ下に"share/pgpool.pam"としてインストールされています。
auth-methodフィールドの後ろに、認証方式のオプションを指定する、name=valueの形式のフィールドが存在する可能性があります。
pool_hba.confレコードは接続が試みられる度に順番に検査されますので、レコードの順序はとても大切です。 典型的には、始めの方のレコードには厳しい接続照合パラメータと緩い認証方式があるのに対し、終わりの方のレコードにはより緩い照合パラメータとより厳しい認証方式があります。 例えば、ローカルTCP接続ではtrust認証方式、リモートTCP接続に対してはパスワードを要求したいとします。 この場合、広範囲にわたって許可されるクライアントのIPアドレスに対するパスワード認証を指定するレコードの前に127.0.0.1からの接続に対するtrust認証指定のレコードが置かれなければなりません。
ティップ: ここで説明された全てのpool_hba認証のオプションはクライアントとPgpool-IIの間についてだということに注意してください。 クラインアントは依然として、PostgreSQLによる認証を通過しなければなりませんし、バックエンドPostgreSQLサーバ上のデータベースに対してCONNECT権限を持っていなければなりません。
pool_hbaにとってはクライアントに指定されたユーザ名やデータベース名(例. psql -U testuser testdb)が実際にバックエンド上に存在するかどうかは問題ではありません。 pool_hbaはpool_hba.confの値とマッチするかどうかのみを気にします。
pool_hba.confファイルの例をいくつか以下に示します。 各種認証方式の詳細については次の節をご覧ください。
例 6-1. pool_hba.confの項目の例
# Allow any user on the local system to connect to any database with # any database user name using Unix-domain sockets (the default for local # connections). # # TYPE DATABASE USER ADDRESS METHOD local all all trust # The same using local loopback TCP/IP connections. # # TYPE DATABASE USER ADDRESS METHOD host all all 127.0.0.1/32 trust # Allow any user from host 192.168.12.10 to connect to database # "postgres" if the user's password is correctly supplied. # # TYPE DATABASE USER ADDRESS METHOD host postgres all 192.168.12.10/32 md5