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: