19.2. ユーザ名マップ

IdentやGSSAPIといった外部の認証システムを使用する場合は、接続を開始したオペレーティングシステムのユーザ名がデータベースユーザ名と同じであるとは限りません。 ユーザ名マップを使用するには、pg_hba.conf内でmap=map-nameオプションを指定してください。 このオプションは、外部ユーザ名を受け取るすべての認証方式をサポートしています。 異なる接続に対して、異なるマップが必要となる可能性があります。そのため、それぞれの接続に対して使用されるマップを指定するために、使用するマップの名称は pg_hba.conf内のmap-nameパラメータで指定されます。

ユーザ名マップはidentマップファイルに定義されています。デフォルトではファイル名はpg_ident.confで クラスタのデータディレクトリに保存されています。(他の場所にも保存できますが、詳細はident_file設定パラメータを参照してください。) identマップファイルは一般的な形式の行を含んでいます。

map-name system-username database-username

コメントと空白はpg_hba.confと同様に扱われます。 map-namepg_hba.conf内で参照される任意の名称です。 他の2つのフィールドは、どのオペレーティングシステムユーザが、どのデータベースユーザに接続することを許可されているかを指定しています。 同じmap-nameは、1つのマップ内でユーザをマップするために繰り返し使用されます。

どれだけのデータベースユーザがオペレーティングシステムのユーザに対して一致しているか、またその逆に対しても制限はありません。 よってマップ内のエントリは、それらが等しいというよりもむしろ "このオペレーティングシステムのユーザはこのデータベースユーザとして接続する"という意味になります。 もし外部の認証システムから得られたユーザ名と接続要求を行ったデータベースユーザ名が対となるエントリがマップ内にある場合は、接続は許可されます。

もしsystem-usernameフィールドがスラッシュ(/)で始まっている場合は、 このフィールドの残りは正規表現として扱われます。 (PostgreSQLの正規表現構文の詳細については項9.7.3.1を参照してください。) 正規表現は単一検索や括弧を使用した表現、database-usernameフィールドで\1(バックスラッシュ)で参照されるような表現を含みます。 これにより、1行で複数のユーザ名のマップが可能となり、簡単な構文で特に使いやすくなります。例を以下に示します。

mymap   /^(.*)@mydomain\.com$      \1
mymap   /^(.*)@otherdomain\.com$   guest

上記のエントリでは、@mydomain.comで終わるシステムユーザ名のドメイン部分を削除して、 @otherdomain.comで終わるシステムユーザ名がguestとしてログインすることを許可します。

ティップ: デフォルトでは正規表現は、文字列の一部を一致させることに注意してください。 上記の例で示したように、システムユーザ名全体を強制的に一致させるために^$を使用すると有用です。

pg_ident.confファイルは起動時と、メインサーバのプロセスが SIGHUPを受信したときに読み込まれます。 起動しているシステムで編集した場合は、ファイルを再読み込みするために(pg_ctl reloadまたはkill -HUPを使用して) postmasterにシグナルを送信する必要があります。

pg_ident.confファイルは、pg_hba.confファイルと結合して使用されます。 例19-2例19-1の例があります。 この例では、192.168のネットワーク内のマシンにログインしている、 オペレーティングシステムのユーザ名でbryanhannrobert以外の誰もが、アクセスを許可されていません。 UnixユーザrobertPostgreSQLユーザであるbobとして接続しようとした時のみ アクセス可能で、 robertや他の名前ではアクセスできません。 annannとして接続した時のみ許可され、bryanhbryanh自身もしくはguest1として アクセスが可能となります。

例 19-2. pg_ident.confファイルの例

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME

omicron         bryanh                  bryanh
omicron         ann                     ann
# bobはこれらのマシン内でrobertというユーザ名を持っています。
omicron         robert                  bob
# bryanhはguest1としても接続可能です。
omicron         bryanh                  guest1