MySQLを使ったデータベース認証

Apacheのユーザー認証制御へ戻る

MySQLを使ってユーザー認証する方法を書きます。この認証方法はApacheとMySQLが問題なく動作しているのが前提です。また、以下の説明ではApache1.3.xでの設定方法です。


mod_auth_mysqlのインストール(Linux編)

WindowsユーザーはWindows編のほうを見てくださいね。

  1. MySQLのサイトで「mod_auth_mysql」の単語で検索するとmod_auth_mysqlのダウンロード・ページにたどり着けます。 ここで、mod_auth_mysql-2.20.tar.gz をダウンロードします (2003/09/01の時のバージョンですから、バージョン番号は変わっているかもしれません)。
  2. ダウンロードしたファイルを解凍します。
    tar zxvf mod_auth_mysql-2.20.tar.gz
  3. コンパイル&インストールをします。makeを使うとうまくいかないようですので、VineLinuxでは以下のようにしました。
    ./configure --with-apxs=/usr/sbin/apxs --with-mysql=/usr/local
    /usr/sbin/apxs -c -I/usr/local/include/mysql mod_auth_mysql.c \
    -L/usr/local/lib/mysql -lmysqlclient
    /usr/sbin/apxs -i -a mod_auth_mysql.so
  4. httpd.confの編集
    「LoadModule lib/apache/mod_auth_mysql.so」の行を「LoadModule auth_mysql_module modules/mod_auth_mysql.so」へ変更します。
  5. Apacheの再起動
    /etc/rc.d/init.d/httpd restart

mod_auth_mysqlのインストール(Windows編)

  1. UNOFFICIAL Apache webserver binaries / module binariesからApacheのバージョンに合わせたmod_auth_mysql-w32.zipをダウンロードします。
  2. ダウンロードしたファイルを解凍します。
  3. 解凍したファイルのうち、mod_auth_mysql.soをApacheのインストール・ディレクトリの中のmodulesフォルダにコピーします。 デフォルトではC:\Program Files\Apache Group\Apache\modulesのはずです。
  4. httpd.confの編集
    以下の行を追加します。
    LoadModule mysql_auth_module modules/mod_auth_mysql.so
    # Apache1ではAddModuleの記述が必要。Apache2では不要です。
    AddModule mod_auth_mysql.c
  5. Apacheの再起動をしてください。

MySQLの準備

MySQLへユーザーIDとパスワードを記述するデータベースを作ります。

ここでは、サンプルに記載されているものを参考にしました。

データベース名: webauth
テーブル名: user_pwd

テーブル「user_pwd」の構成は以下です。
create table user_pwd (
  name varchr(30) not null,
  pass varchar(30),
  primary key (name)
);

これらは、どんなデータベース名、テーブル名、フィールド名でもかまいません。 ただし、後で説明する.htaccessにはここで作ったデータベースと同様の設定をする必要があります。

また、MySQLのアクセス制御も設定してください。この例では webauth データベースにアクセスできるMySQLのアカウントが必要です。 説明上、今回はrootアカウントで説明しますが、実際の運用では変えたほうがいいです。

ここまで設定したら、user_pwdにユーザー名とパスワードを登録してください。phpMyAdminを使えば簡単です。


.htaccessの準備

アクセス制御したいディレクトリに.htaccessというファイルを作ります。このファイルの中身は次のようにします。


  AuthName "mod_auth_mysql Page"  ← パスワード入力画面のタイトル
  AuthType Basic
  require valid-user
  AuthMySQLHost localhost
  AuthMySQLDB webauth          ← さきほど作ったMySQLデータベースの名前
  AuthMySQLUser root        ← 実際の運用では変えてください。
  AuthMySQLPassword rootのパスワード ← 実際の運用では変えてください。
  AuthMySQLUserTable user_pwd     ← さきほど作ったテーブル名
  AuthMySQLNameField name         ← ユーザーIDを保存するフィールド名
  AuthMySQLPasswordField pass     ← パスワードを保存するフィールド名
  AuthMySQLCryptedPasswords Off

これで、あとはアクセス制御を設定したページを見てください。パスワードを聞かれると思います。

Copyright©2001-2014 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org