★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

20.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)で参照されるような表現を含みます。 これにより、1行で複数のユーザ名のマップが可能となり、簡単な構文で特に使いやすくなります。例を以下に示します。

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

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

ヒント

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

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

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

例20.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