無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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-user name

 

database-user name

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

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

もし system-user name フィールドがスラッシュ( / )で始まっている場合は、 このフィールドの残りは正規表現として扱われます。 ( PostgreSQL の正規表現構文の詳細については 項9.7.3.1 を参照してください。) 正規表現は単一検索や括弧を使用した表現、 database-user name フィールドで \1 (バックスラッシュ-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のネットワーク内のマシンにログインしている、 オペレーティングシステムのユーザ名で bryanh ann robert 以外の誰もが、アクセスを許可されていません。 Unixユーザ robert PostgreSQL ユーザである bob として接続しようとした時のみ アクセス可能で、 robert や他の名前ではアクセスできません。 ann ann として接続した時のみ許可され、 bryanh bryanh 自身もしくは guest1 として アクセスが可能となります。

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

# MAPNAME       SYSTEM-user name         PG-user name

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

powered by SEO.CUG.NET