Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15056359
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: Mysql/postgreSQL

2008-04-02 14:54:57

Apache来实现基本的用户身份认证有很多种方式,比如最常见的txt文本和DBM格式,但在负载很重的server上-这些都不是理想的方法,文本的形式是基于平面的,性能很差而且也不安全;DBM好些但在千或万级用户时还是力不从心,于是用database做后台存储则是很好的方法-比平面搜索更有效而且安全,用户口令以DES加密形式存储在数据库的表中。 m;TFg 7J  
这种实现要归功于Apache本身出色的模块化结构--以及开放的DSO方式,可以使开发人员完成大量的第三方模块,并扩充Apache的功能。我在本文中只写了用Mysql做后台存储--此外还可用Postgresql,Oracle等来完成,原理一样-都是用各自的模块。 H^ l$y  
让我们开始吧--先去modules.apache.org(这可是Apache第三方模块的大本营)找到mod_auth_mysql--会有两个我们要用DSO那个-事实上直接去下一个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时会报错-无法装载此模块。 &t|9>+"]:  
好-看看httpd.conf中应该有LoadModule mysql_auth_module libexec/mod_auth_mysql.so和AddModule mod_auth_mysql.c这两句了,重起Apache也不应该有问题。 9 bv1~nvZ  
然后我们进入mysql,mysql>create database auth; ]xA KaIG[S  
mysql>use auth; ?[3 :X@5:  
mysql> create table mysql_auth ( Wq: `3  
-> user_name char(20) not null, xWy! &  
-> user_passwd char(25), {LEkBM9J  
-> groups char(25), GEYz>NN\  
-> primary key (username) ); g[A1ev;`?  
注意字段名一定是user_name和user_passwd这个。再插入几条记录: w "eb.@  
mysql> insert into mysql_auth values('xingfei2',encrypt("abcde"),'xingfei'); tc 
Query OK, 1 row affected (0.00 sec) M^e4t  
mysql> insert into mysql_auth values('xingfei',encrypt("abcde"),'xingfei'); -( j+J ~  
Query OK, 1 row affected (0.00 sec) c%( b_d  
这里abcde是口令-用encrypt函数来进行加密,用的是DES算法-这是和unix的password等同的算法-而不是mysql本身加密的password()函数。 ID WJ7p  
最后在要保护的目录里建一个.htaccess(别忘了把AllowOverride all打开)内容如下: f;46+Cu0  
authname "xingfei" J+|+{%Y_,  
authtype basic $nKi~ bp  
AuthMySQLHost localhost ---mysql主机名 v MjdG  
authmysqluser root ---mysql用户 !b$_ =?  
authmysqlpassword abc ---mysql用户的口令 [\O\o|,   
AuthMySQLDB auth ---用户所用的库-也就是我们建的库 g~'XCV.G9M  
AuthMySQLUserTable mysql_auth ---所用的表 w_>S C'(  
AuthMySQLGroupField groups ---用户组的字段名 Z!9qs`i6  
require group xingfei M 9_Ca4!  
require user xingfei 53s:$ G,  
可以把用户都放在一个组里-只要是这个组里的用户即可通过认证。-也可require单个或多个用户。
阅读(297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~