[ネットワークメモ]
 ネットワークメモ番外編
 ごく一部の人向けに割と実用的なお話
▲IT関連情報へ戻る
番外編(mod_auth_pgsql) (2004/10/07)
今回はちょっとネットワークとは直接関係のない話です。ですが、まったく関係がないわけでもなく、また、個人的にとても重要なことなので、ここに掲載いたしました。

●mod_auth_pgsql
「mod_auth_pgsql」をみなさんご存知でしょうか。apacheのbasic認証をhtpasswdで作成したファイルではなく、PostgresのDBの情報を元に行うというものです。認証IDが多い場合や、DBに入っている情報を元に認証の条件をより複雑なものにしたい場合などに重宝します。
大変便利なのですが、サーバがapache2になった場合に苦労する点があります。今回はその点について解説します。つまり「apache2を使っている」人で「Postgres」のDBを入れていて、認証に「mod_auth_pgsqlを利用」していてさらに「困っている」人限定ページです。実はその使い方によって、さらに少数の人間に絞り込まれるのですが、ここまで来るとこのページが有効である人の数は壊滅状態に近いです。どのぐらい壊滅的かについても一緒に解説していきましょう。
まず、今回覚えていただきたいことは次の2点です。
  • 「Auth_PG_gid_field」が「Auth_PG_grp_group_field」に変更された
  • グループテーブルの方の個別認証IDは「Auth_PG_grp_user_field」で指定する
順番に一つずつ見ていきましょう。

●「Auth_PG_gid_field」が「Auth_PG_grp_group_field」に変更された
apacheのmod_auth_pgsqlでグループ認証を行っていた方ならご存知かと思いますが、「Auth_PG_gid_field」というdirectiveがあります。ところがapache2のモジュールではこれが「Auth_PG_grp_group_field」という名前に変更になっています。

Home Page http://www.giuseppetanzilli.it/mod_auth_pgsql2/

上記が公式のページらしいのですが、「Directives」には「Auth_PG_grp_group_field」がありません(ように思います:2004年10月7日現在)。「Auth_PG_gid_field」が掲載されています。
ではなぜ変更になったことがわかるのか。
このページの下の方で更新履歴(「Changelog」)があります。

「 - renamed Auth_PG_gid_field to Auth_PG_grp_group_field」

ありました。1行だけです。というわけで、apacheからapache2へ移行して、mod_auth_pgsqlのグループ認証で困っていた人、これで解決です。
この情報がどれほど役に立つ情報かと言うと、

・「Auth_PG_grp_group_field」をgoogleで検索(日本語のみ:2004年10月7日現在)
 →3件中似たページを除いて1件

日本ではほとんど使われていないのでしょうか。

●グループテーブルの方の個別認証IDは「Auth_PG_grp_user_field」で指定する
個別認証IDという呼称が正しいのかどうかわかりませんが、「Auth_PG_uid_field」で指定したフィールドのことです。apacheのmod_auth_pgsqlではグループテーブルの方の個別認証IDは「Auth_PG_uid_field」で指定したフィールドと同じ名称ということになっていました。
ところがapache2の方のモジュールではこのままほっておくと、「PG: Missing parameters for password lookup: Group table user field name」というようなエラーが出て、認証されません。どうやらグループテーブルと認証テーブルとがうまく連携していないようです。そこで次のdirectiveが登場します。

「Auth_PG_grp_user_field」

ここにグループテーブルの方の個別認証IDを指定すると、グループテーブルと認証テーブルが同期を取るようになるようです。
さて、前述の公式ページですが、「Directives」には「Auth_PG_grp_user_field」がありません(ように思います:2004年10月7日現在)。
ではなぜ追加されたことがわかるのか。
このページの下の方で更新履歴(「Changelog」)があります。

「- added Auth_PG_grp_user_field」

ありました。1行だけです。これについてはどう使うのかの説明すらありません。勘です。というわけで、apacheからapache2へ移行して、mod_auth_pgsqlのグループ認証でさらに困っていた人、これで解決です。
この情報がどれほど役に立つ情報かと言うと、

・「Auth_PG_grp_user_field」をgoogleで検索(日本語のみ:2004年10月7日現在)
 →ヒットしません。
・「Auth_PG_grp_user_field」をgoogleで検索(世界全体:2004年10月7日現在)
 →14件中似たページを除いて8件。

世界でもほとんど使われていないのでしょうか。

●サンプル
最後に「httpd.conf」への記述サンプルを掲載しておきます。

--------------------------------
Auth_PG_host localhost
Auth_PG_port 5432
Auth_PG_database bakadb
Auth_PG_user bakamaster
Auth_PG_pwd bakapass
Auth_PG_pwd_table usertbl
Auth_PG_uid_field userid
Auth_PG_pwd_field userpass
Auth_PG_grp_table grouptbl
Auth_PG_grp_group_field groupid
Auth_PG_grp_user_field userid
Auth_PG_encrypted off
AuthName "bakasection1"
Authtype Basic
Require group sec1
--------------------------------

こんな感じで設定したらどうでしょうか。
「Auth_PG_encrypted」はパスワードの保存状況次第で変えてください。

講師プロフィール:里村俊一
1995年 慶應義塾大学経済学部卒
同年 千代田生命情報システム株式会社入社
1998年 千代田生命情報システム株式会社を退社し、株式会社知識計画に入社。
2001年 情報処理技術者(テクニカルエンジニア:ネットワーク)を取得。
今に至る。

ご意見・お問合せはinfo@satram.jpまで
Copyright 2003 Satellite RAMBLING. All rights reserved.