到目前为止我们的用户名密码文件还是以文本文件形式存放在文件系统中的,出于安全性的需要的考虑,文本文件的管理方式都不能满足需求了。通过 Apache 的 module_auth_mysql 模块,我们可以用 MySQL 来保存用户信息。
1. 下载module_auth_mysql模块
主页:http://modauthmysql.sourceforge.net/
或者:http://www.rpmcenter.org/win32/,这里包含有编译好的module_auth_mysql.so
2. 安装模块
安装方法同之前的Apache 的模块一样,复制到modules 目录并在httpd.conf 文件中添加如下语句:
LoadModule mysql_auth_module modules/mod_auth_mysql.so
3. 创建MySql数据库(假设已经安装完MySql,并且能正常运行)
在mysql中创建一个svn数据库,新建一个user表
CREATE TABLE `user_info` (
`user_name` char(30) NOT NULL COMMENT '用户名',
`user_passwd` char(20) NOT NULL COMMENT '密码',
PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
插入一条记录
insert into user_info(user_name,user_passwd)
values ('admin','admin');
4. 修改版本库的配置文件的内容:
DAV svn
SVNPath "D:/SourceCode/project1"
AuthzSVNAccessFile "D:/SourceCode/conf/project1_access.txt"
Require valid-user
AuthType Basic
AuthName "MySQL repository "
AuthMySQLHost localhost
AuthMySQLDB svn
AuthMySQLUser root
AuthMySQLPassword sa
AuthMySQLUserTable user_info
AuthMySQLEnable On
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLPwEncryption none
解释一下参数含义:
AuthMySQLHost:mysql数据库的主机名称(可以是localhost,host名称或者ip地址)
备选参数AuthMySQLPort:Mysql数据库的端口号
AuthMySQLDB:数据库名称
AuthMySQLUser:数据库用户名
AuthMySQLPassword:数据库密码
AuthMySQLUserTable:存放用户名和密码的数据库表
AuthMySQLEnable:是否启用mysql数据库认证(On Off)
AuthMySQLNameField:表中存放用户名的字段名
AuthMySQLPasswordField:表中存放密码的字段名
AuthMySQLPwEncryption:密码的加密方式(none | crypt | scrambled | md5 | aes | sha1)
none 不加密
ceypt Unix的加密方式
scrambled mysql的加密方式
md5 md5加密方式
aes aes加密方式
sha1 sha1加密方式
5. 在数据库中添加用户组:
在user_info表中增加字段user_group char(20)
更新admin的用户的user_group为"administrator"
新增另外一条记录
insert into user_info(user_name,user_passwd,user_group)
values ('zwang','zwang','develper');
修改版本库的配置文件的内容:
DAV svn
SVNPath "D:/SourceCode/project1"
#AuthzSVNAccessFile "D:/SourceCode/conf/project1_access.txt"
AuthType Basic
AuthName "MySQL repository "
AuthMySQLHost localhost
AuthMySQLDB svn
AuthMySQLUser root
AuthMySQLPassword sa
AuthMySQLUserTable user_info
AuthMySQLEnable On
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLGroupField user_group
AuthMySQLPwEncryption none
Require group administrator test
新增参数:
AuthMySQLGroupField:表中存放用户组的字段名
把Require valid-user修改为Require group administrator test,即允许administrator和test组访问。
这样的表结构只能允许一个用户一个组的设计,如果需要一个用户属于多个组,需要把user_group字段拆分出来,设计另外一张用户组表,这里就不详细说了,具体可以参考该模块主页上的配置例子