2010年 2月 16日 はてなブックマーク -

MySQLでApache WebDAVの認証[2006年07月16日(日)]

さて、MySQLの準備が終わったのでApacheの方の設定を行う。
その前に、MySQLのライブラリファイルを入手しておく。
> apt-get install libmysqlclient14-dev

次は、認証に使用する mod_auth_mysql の入手だ。ダウンロードは以下から行える。
http://sourceforge.net/projects/modauthmysql/

ダウンロードしたら展開したら、あとは中に入っている”BUILD”ファイルの説明に従ってApache2に入れるだけ。
> /usr/local/apache2/bin/apxs -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
> /usr/local/apache2/bin/apxs -i mod_auth_mysql.la
これで完了。apache2 の下の modules ディレクトリを見ると、ちゃんと mod_auth_mysql.soが入っている。

あとはApacheの設定。 httpd.conf に以下を追加する。
> LoadModule mysql_auth_module modules/mod_auth_mysql.so

“CONFIGURE”ファイルの中を読む限り、記述できるMySQLに関する項目は以下らしい。
AuthMySQLEnable:MySQLによる認証を行うか(On/Off)
AuthMySQLHost:MySQLを置いているホスト
AuthMySQLPort:MySQLに接続するポート番号(デフォルトは3306)
AuthMySQLSocket:socketファイルのパス
AuthMySQLUser:MySQLに接続するユーザ
AuthMySQLPassword:MySQLに接続するパスワード
AuthMySQLDB:データベース名
AuthMySQLUserTable:ユーザ情報を格納しているテーブル名
AuthMySQLUserCondition:ユーザを検索する追加条件(Where句に追加される)
AuthMySQLNameField:ユーザ名を格納しているカラム名
AuthMySQLPasswordField:パスワードを格納しているカラム名
AuthMySQLNoPasswd:空のパスワードを許可するか(On/Off)
AuthMySQLPwEncryption:パスワードの暗号化(none/crypt/scrambled/md5/aes/sha1)
AuthMySQLSaltField:AESで暗号化するときのsalt値を格納しているカラム名
AuthMySQLGroupTable:グループ情報を格納しているテーブル名
AuthMySQLGroupCondition:グループを検索する追加条件(Where句に追加される)
AuthMySQLGroupField:グループ名を格納しているカラム名
AuthMySQLKeepAlive:Apache2では無視される項目
AuthMySQLAuthoritative:他の認証(mod_auth…など)を使用するか
AuthMySQLCharacterSet:MySQLの文字コード

この設定によって、以下のようなSQLが内部で実行されるようだ。[xxx]は上記の設定を行った値が入る。(saltの設定があったりすれば、また違うSQLになるけど)
| SELECT [AuthMySQLPasswordField], length([AuthMySQLPasswordField])
| FROM [AuthMySQLUserTable]
| WHERE [AuthMySQLNameField]=’[入力されたユーザ名]’
| AND [AuthMySQLUserCondition]
ユーザ名などはエスケープ(mysql_escape_string())される。
つまり、
> AuthMySQLUserTable “hoge1, hoge2”
と書けば、FROMの部分は
| FROM hoge1, hoge2
になる。複数のテーブルを結合させたりするのも簡単にできそうだ。

ちなみに、Where句を指定できる xxxxCondition は以下の値を使用できるとのこと。
%h:接続元のDNS名
%a:接続元のIPアドレス
%f:要求されたファイル名
%V:Apacheサーバのホスト名
%v:バーチャルホスト名
%H:プロトコル(リクエストの中に含まれる”HTTP/1.1”など)
%m:リクエストのメソッド(“GET”、”POST”など)
%q:リクエストパラメータ
%r:リクエストの行
%U:URIのパス
例えば、
> AuthMySQLUserCondition = “ip_address = ‘%a’”
のように書いておけば、接続元のIPアドレスの条件で絞り込むことができるようだ。

これにApacheの認証に関する記述を併せて、今回は以下のような内容にしてみた。
> AuthName “WebDAV secure zone”
> AuthType Basic
> Require valid-user
> AuthMySQLEnable On
> AuthMySQLHost localhost
> AuthMySQLUser bar
> AuthMySQLPassword hoge
> AuthMySQLDB hoge
> AuthMySQLUserTable foofoo
> AuthMySQLNameField user_id
> AuthMySQLPasswordField password
> AuthMySQLPwEncryption scrambled
ここで、パスワードを格納しているテーブルを foofoo (実際はfooを参照しているビュー)にしている。

Qaplaの覚書・メモ・備忘録・独言

2年前 | | 2010年 2月 16日 | このエントリーを含むはてなブックマーク