【SQL実践|実務向け】PostgreSQLにおけるIdent認証の要:pg_ident.confによるユーザーマッピングの実践的設定

導入

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の設定を誤ると、意図したユーザーが接続できなくなるだけでなく、最悪の場合「認証エラー」がログに大量出力され、サービス監視のノイズとなります。設定変更後は、必ず開発環境等で接続テストを行ってください。

コメント

タイトルとURLをコピーしました