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

來源:互聯網
上載者:User

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單個或多個使用者。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.