ユーザ名マップ

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 第 19章クライアント認証 | 早送り | 次のページ

# 19.2. ユーザ名マップ

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

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

    map-name system-username database-username

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

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

もし`system-username`フィールドがスラッシュ（`/`）で始まっている場合は、 このフィールドの残りは正規表現として扱われます。 （PostgreSQLの正規表現構文の詳細については項9.7.3.1を参照してください。 ユーザ名マップ内の正規表現は常に"advanced"として扱われます。） 正規表現は単一検索や括弧を使用した表現、`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`を使用して） サーバにシグナルを送信する必要があります。

`pg_ident.conf`ファイルは、`pg_hba.conf`ファイルと結合して使用されます。 例19-2に例19-1の例があります。 この例では、192.168のネットワーク内のマシンにログインしている、 Unixユーザ名で`bryanh`、`ann`、`robert`以外の誰もが、アクセスを許可されていません。 Unixユーザ`robert`はPostgreSQLユーザである`bob`として接続しようとした時のみ アクセス可能で、 `robert`や他の名前ではアクセスできません。 `ann`は`ann`として接続した時のみ許可され、`bryanh`は`bryanh`自身もしくは`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

前のページ | ホーム | 次のページ
`pg_hba.conf`ファイル | 上に戻る | 認証方式