程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Apache與MySQL整合實現基本身份認證

Apache與MySQL整合實現基本身份認證

編輯:關於MYSQL數據庫
apache來實現基本的用戶身份認證有很多種方式,比如最常見的txt文本和DBM格式,但在負載很重的server上-這些都不是理想的方法,文本的形式是基於平面的,性能很差而且也不安全;DBM好些但在千或萬級用戶時還是力不從心,於是用database做後台存儲則是很好的方法-比平面搜索更有效而且安全,用戶口令以DES加密形式存儲在數據庫的表中。

  這種實現要歸功於Apache本身出色的模塊化結構--以及開放的DSO方式,可以使開發人員完成大量的第三方模塊,並擴充apache的功能。我在本文中只寫了用MySQL做後台存儲--此外還可用Postgresql,Oracle等來完成,原理一樣-都是用各自的模塊。

  讓我們開始吧--先去modules.apache.org找到mod_auth_mysql--會有兩個我們要用DSO那個-事實上直接去ftp://FTP.kcilink.com/pub/下一個mod_auth_mysql.c.gz就行-好-把它解開是一個mod_auth_mysql.c-好-我們用apxs來生成DSO模塊(前題是你用DSO模式編譯的apache)--apxs -c -i -a -L/usr/local/lib/mysql -lmysqlclIEnt >-lm mod_auth_mysql.c即可--這裡注意一定要這麼寫---L/usr/local/lib/mysql是mysql的客戶庫位置,我假定MySQL是用的缺省安裝)---如果不加在起動apache時會報錯-無法裝載此模塊。

  好了看看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單個或多個用戶。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved