Postgres を利用したBASIC認証とデータベース接続の永続化

apacheで利用するユーザー認証のバックエンドとしてpostgresのデータベースを利用することができます。

※以下設定はバックエンドに PostgreSQL を利用する場合です。

※但しドライバ名を変更すれば MySQL Oracle 等でも利用可能です。

[必要なモジュール]

  • mod_perl
  • Apache::DBI
  • Apache::AuthDBI
  • DBI
  • DBD::Pg

○postgres で以下の内容のテーブルを作成して認証認定するユーザーを登録 して下さい。

※尚、登録するユーザー名はユニークである必要があります。

        Table "users"
 Attribute | Type | Modifier
-----------+------+----------
 username  | text |
 password  | text |
 groupname | text |

○apache 起動時に読み込むモジュールをstartupファイルで指定とDBの永続接 続の設定

/etc/httpd/conf/startup.pl

#!/usr/bin/perl
$ENV{GATEWAY_INTERFACE} =~ /^CGI-Perl/ or die "GATEWAY_INTERFACE not
Perl!";
use Apache;
#use Apache::Registry;
use Apache::DBI;
use Apache::AuthDBI;
use MY_FAVORITE_MODULE;
use strict;

#$Apache::DBI::DEBUG = 2;
Apache::DBI->connect_on_init("dbi:Pg:dbname=hoge", "fuga", "moge");
Apache::DBI->setPingTimeOut("dbi:Pg:dbname=hoge", 0);
#$Apache::AuthDBI::DEBUG = 2;
Apache::AuthDBI->setCacheTime(0);
Apache::AuthDBI->setCleanupTime(-1);
Apache::AuthDBI->initIPC(50000);

1;

○startupファイル指定と認証ディレクティブの設定

以下の内容を httpd.conf に追加 DBI 接続に必要なパラメータとDBテーブルの(カラム名)指定 と認定されるユーザー&グループの指定

※認証が必要なディレクティブ /home/fuga/public_html/user の設定

PerlRequire /etc/httpd/conf/startup.pl
PerlFreshRestart On
<Directory /home/fuga/public_html/user>
AuthName security zone
AuthType Basic
PerlAuthenHandler Apache::AuthDBI::authen
PerlAuthzHandler  Apache::AuthDBI::authz
PerlSetVar Auth_DBI_data_source   dbi:Pg:dbname=hoge
PerlSetVar Auth_DBI_username      fuga
PerlSetVar Auth_DBI_password      moge
PerlSetVar Auth_DBI_pwd_table     users
PerlSetVar Auth_DBI_uid_field     username
PerlSetVar Auth_DBI_pwd_field     password

PerlSetVar Auth_DBI_grp_field     groupname
PerlSetVar Auth_DBI_encrypted     off
<Limit GET>
require valid-user
</Limit>
</Directory>

以上の設定が終わったら httpd をリスタートして下さい。

データベース永続接続の確認

コンソールから ps ax して postgres の idle プロセスが httpd プロセスと同数上がっていればデータベース接続の永続化成功です。 通常の接続(Apache::DBIを用いない)の場合は postgres との接続プロセスはプログラムの終了をもって自動的に消滅しますが、Apache::DBI を用いて接続すると永久に (shutdownするまで)接続状態を保つことができます。 これは一般的に言われているデータベースとの接続コストを避けることが出来ます。

DBI を使った認証の確認

ブラウザから httpd.conf で設定した認証が必要なディレクトリにアクセスし ます。 このままの設定だと http://localhost/~fuga/user/ になります。 認証のポップアップウィンドウが現れ postgres の users テーブルに登録したユーザ名と Password を入力してリクエストしたファイルが表示されれば全て成功です。

created:

Back to top