這種實現要歸功於Apache本身出色的模塊化結構--以及開放的DSO方式,可以使開發人員完成大量的第三方模塊,並擴充apache的功能。我在本文中只寫了用MySQL做後台存儲--此外還可用Postgresql,Oracle等來完成,原理一樣-都是用各自的模塊。
好了看看httpd.conf中應該有LoadModule mysql_auth_module libexec/mod_auth_mysql.so和AddModule mod_auth_MySQL.c這兩句了,重起apache也不應該有問題。
然後我們進入mysql,MySQL>create database auth;
mysql>use auth; mysql> create table MySQL_auth ( -> user_name char(20) not null, -> user_passwd char(25), -> groups char(25), -> primary key (username) );
注意字段名一定是user_name和user_passwd這個。再插入幾條記錄:
mysql> insert into mysql_auth values ('xingfei2',encrypt("abcde"),'xingfei'); Query OK, 1 row affected (0.00 sec) mysql> insert into MySQL_auth values ('xingfei',encrypt("abcde"),'xingfei'); Query OK, 1 row affected (0.00 sec)
這裡abcde是口令-用encrypt函數來進行加密,用的是DES算法-這是和unix的passWord等同的算法-而不是MySQL本身加密的passWord()函數。
最後在要保護的目錄裡建一個.htAccess(別忘了把AllowOverride all打開)內容如下:
authname "xingfei" authtype basic AuthMySQLHost localhost ---mysql主機名 authmysqluser root ---mysql用戶 authmysqlpassWord abc ---mysql用戶的口令 AuthMySQLDB auth ---用戶所用的庫-也就是我們建的庫 AuthMySQLUserTable mysql_auth ---所用的表 AuthMySQLGroupFIEld groups ---用戶組的字段名 require group xingfei require user xingfei
可以把用戶都放在一個組裡-只要是這個組裡的用戶即可通過認證,也可require單個或多個用戶