元ネタはココです。
モジュールが入ってなかった。
# yum -y install mod_auth_mysql
# service httpd restart
データベースとテーブルは、phpmyadminで適当に設定してみた。
どんなSQL(Create Table)かは、テーブルのエクスポート画面でエクスポート方法を詳細、出力を出力をテキストで表示するにして実行ボタンを押すと判る。
CREATE TABLE IF NOT EXISTS `member_info` (
`member_id` varchar(64) COLLATE utf8_bin NOT NULL,
`member_password` varchar(40) COLLATE utf8_bin NOT NULL COMMENT ‘sha1’,
PRIMARY KEY (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
レコードに素でパスワードを入れるのは気味が悪くなるのでSHA1でデコードしておく。
INSERT INTO `member_info`( `member_id`, `member_password`) VALUES (‘abcdef’,SHA1(‘123456’))
サンプル画面のディレクトリィに.htaccessを作る
<Files ~ “^\.(htaccess|htpasswd)$”>
deny from all
</Files>
# MySQLによる認証を有効に
AuthMySQLEnable On
# mysqldへの接続Socket
AuthMySQLSocket /var/lib/mysql/mysql.sock
# mysqldの場所
AuthMySQLHost localhost
# mysqldへの接続ユーザ
AuthMySQLUser <接続ユーザ>
# mysqldへの接続パスワード
AuthMySQLPassword <接続パスワード>
# 認証を行う情報が格納されたデータベース名
AuthMySQLDB <データベース名>
# 認証を行う情報が格納されたテーブル名
AuthMySQLUserTable <テーブル名>
# 認証を行うユーザ名が格納されているカラム名
AuthMySQLNameField <IDのカラム名>
# 認証を行うパスワードが格納されているカラム名
AuthMySQLPasswordField <パスワードのカラム名>
# 認証を行うパスワードが格納されているカラムの暗号方式
AuthMySQLPwEncryption sha1
# パスワード無しのユーザからの接続を許可するかどうか
AuthMySQLNoPasswd Off
# 以下はBasic認証を行う場合のお約束事らしい。メッセージに日本語使うと文字化けするからやめといた方がいい。
AuthGroupFile /dev/null
AuthName “Enter your ID and password”
AuthType Basic
require valid-user
order deny,allow
後はサンプル画面を作ってアクセスしてみる。
多分、何か失敗している。apacheのエラーログを見ると
データベースやテーブルが無いとか色々出るだろう(多分.htaccessの設定ミス)
ついついaccessログも見てしまうが・・・botウゼーになってしまうので見ないほうがマシだ。
Safariユーザが意外に多いな・・・って、iPhone OS 5?画像多いのに。そうか画像を多くすればいいんだな。
もし、ベーシック認証の画面がポップしないでサンプルが開くなら、.htaccess自体を読んでいない証拠だ。
初期設定のhttpd.confで/var/www/html設定箇所でAllowOverride ALLに直すか
サンプルを作ったディレクトリィ用の設定を/etc/httpd/conf.dに追加、
<test.conf>
<Directory /var/www/sample/>
Order Deny,Allow
Deny from All Allow from 127.0.0.1
Allow from ::1
# テスト用だからLAN内だけアクセス化
Allow from 192.168.1
# .htaccessを読むようにする
AllowOverride ALL
</Directory>
そしてapacheに設定を読み込ませて
# service httpd reload
みるしかないだろう。
ああ、勿論ここで作ったサンプルは外から見れないようになっている。