如何用Apache与MySQL整合实现基本身份认证_PHP教程
2013-09-05 09:42
866 查看
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;
注意字段名一定是user_name和user_passwd这个。再插入几条记录:
这里abcde是口令-用encrypt函数来进行加密,用的是DES算法-这是和unix的password等同的算法-而不是mysql本身加密的password()函数。
最后在要保护的目录里建一个.htaccess(别忘了把AllowOverride all打开)内容如下:
可以把用户都放在一个组里-只要是这个组里的用户即可通过认证,也可require单个或多个用户。
这种实现要归功于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) ); |
以下为引用的内容: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) |
最后在要保护的目录里建一个.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 |
相关文章推荐
- PHP和MySQL Web开发读书笔记---使用PHP和MySQL实现身份认证
- Windows下用mysql+apache+php实现论坛的基本过程 推荐
- Linux+Apache用 mod_auth_mysql实现用户身份认证
- apache+mysql+php实现最大负载的方法
- HPUX Apache+PHP+MySQL配置详细教程
- Mac OS X 配置 Apache+Mysql+PHP 详细教程
- windows下配置APMServ实现Apache+PHP+Mysql环境
- windows下整合Apache+Tomcat+MySQL+PHP
- APACHE+PHP+MySQL 绿色版安装教程
- [转]配置整合Win+Apache+PHP+MySQL+Tcomcat(或Resin)完全手册
- 【PHP教程一】在Mac下配置php开发环境:Apache+php+MySql
- linux下整合jdk、tomcat、apache、php、mysql
- Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结
- 如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
- Linux Apache php MySQL GD PHPWind 集成环境配置教程
- 如何在PHP中进行身份认证
- 如何在CentOS6下实现Apache+PHP+MySQL的快速安装
- 如何在Ubuntu上安装Apache,MySQL,PHP,Nginx,HAProxy,以及如何在docker上安装LAMP
- 教你如何实现Apache的用户认证
- mysql 5.6 如何使用validate_password加密认证插件实现无密码登陆