導入
PostgreSQLの運用において、セキュリティと利便性のバランスを保つことはDBAにとって重要な責務です。Ident認証は、クライアント側のOSユーザー名を利用してデータベースへの接続を許可する仕組みですが、OS上のユーザー名とPostgreSQLのロール名が必ずしも一致しないケースが多々あります。pg_ident.confは、この乖離を埋める「マッピング」を行うための設定ファイルです。本記事では、Ident認証を安全かつ確実に運用するための設定手順を解説します。
基礎知識
Ident認証とは、クライアントが接続してきたOSのユーザー名をOSから直接取得し、それをPostgreSQLのロール名と照合して認証を行う方式です。ここで必要となるのが「マッピング」という概念です。
pg_ident.confは、OSのユーザー名(SYSTEM-USERNAME)とPostgreSQLのロール名(PG-USERNAME)を紐付けるための辞書のような役割を果たします。この紐付けに名前を付けたものが「MAPNAME」です。これにより、OS上の特定のユーザーを、任意のデータベースロールとしてログインさせることが可能になります。
実装/解決策
設定は以下の2つのステップで行います。
1. pg_ident.confの編集
PostgreSQLのデータディレクトリ内にあるpg_ident.confを開き、以下の形式で追記します。
MAPNAMEは自由に命名可能です。
2. pg_hba.confの更新
認証方式に「ident」を指定し、かつ「map=MAPNAME」を追加することで、作成したマッピング定義を有効化します。
設定後は、必ずPostgreSQLのサービスをリロード(pg_ctl reloadなど)してください。
サンプルプログラム
以下は、OSユーザー「web_admin」をPostgreSQLのロール「app_user」として接続させるための設定例です。
pg_ident.confの設定例
構成ファイル末尾に以下を追記します
MAPNAME SYSTEM-USERNAME PG-USERNAME
—————————————————-
app_mappingという名前でマッピングを定義
app_mapping web_admin app_user
pg_hba.confの設定例
ローカル接続に対してIdent認証とマッピングを適用
TYPE DATABASE USER ADDRESS METHOD
host mydb app_user 127.0.0.1/32 ident map=app_mapping
※注意: 上記の設定により、OSユーザー「web_admin」でログインしている端末から接続した場合のみ、データベース「mydb」に対して「app_user」として接続が許可されます。
応用・注意点
現場での運用において、以下の点に注意してください。
・セキュリティリスクの理解: Ident認証はクライアント側のOSが信頼できる環境(安全なサーバー内など)であることを前提としています。クライアントPCのOSユーザーが偽装可能な環境では、Ident認証は脆弱となるため、SSL接続やパスワード認証を併用する設計が望ましいです。
・正規表現の活用: SYSTEM-USERNAMEには正規表現も使用可能です。例えば「/^(.+)@example\.com$/ \1」のように記述すると、ドメイン付きのユーザー名を自動的にロール名へ変換するといった柔軟な運用が可能です。
・設定ミス時の挙動: pg_ident.confの設定を誤ると、意図したユーザーが接続できなくなるだけでなく、最悪の場合「認証エラー」がログに大量出力され、サービス監視のノイズとなります。設定変更後は、必ず開発環境等で接続テストを行ってください。

コメント