PC-UNIXに関する記事など

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

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 を入力してリクエストしたファイルが表示されれば全て成功です。


    このエントリーをはてなブックマークに追加

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

    トラックバック(0)

    トラックバックURL: http://www.omakase.org/mt/mt-tb.cgi/121

    コメントする

    カテゴリperlの記事一覧