网上多数都是介绍SVN+Apache+MySQL搭建版本库平台,由于需要开发了基于.NET的扩展尝试使用SQL Server Express 2005进行认证。
其实配置方法类似使用MYSQL,但一些Apache参数需要调整。步骤:
1.当然是安装了SQL Server Express 2005,并有认证数据库,假设名称为Test。
1)创建表Apache_Users,增加字段[user_name] [nvarchar](50),[password] [nvarchar](50)
2)插入数据test,123456
2.添加数据源,打开[控制面板][管理工具][数据源 (ODBC)],系统DSN选项卡[添加]。
1)创建数据源中选SQL Server[完成]。
2)创建到SQL Server的新数据源,[名称]自己设为TestDB(可自己设,后面用到)、[描述]随便、[服务器]为Test数据库所在数据库(一般为XXXX/SQLEXPRESS)[下一步]。
3)本地用Windows NT验证,远程最好用SQL Server验证并最好填上[登录ID]和[密码],[下一步]。
4)勾上[更改默认的数据库为],下拉选择Test,如果没有说明2)中[服务器]未设到对应Test数据库的服务器,[下一步]。
5)按默认选项,点[完成]。
系统DSN选项卡中[系统数据源]出现TestDB。
3.配置Apache,修改httpd.conf
1)找到#LoadModule dbd_module modules/mod_dbd.so去掉“#”
改为如下:具体设置参看Apache文档Apache Module mod_dbd
LoadModule dbd_module modules/mod_dbd.so
DBDriver odbc
DBDParams "datasource=TestDB user=数据库用户名 password=数据库密码"
DBDKeep 10
DBDMax 10
DBDMin 10
2)找到#LoadModule authn_dbd_module modules/mod_authn_dbd.so去掉“#”,
SVN访问修改成如下,主要红色认证部分要对应Apache_Users的字段,详细参考Apache文档Apache模块 mod_authn_dbd
<Location /svn>
DAV svn
SVNParentPath 自行设定的SVN版本库位置
AuthType Basic
AuthName "自行设定认证框显示名称"
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT password FROM Apache_Users WHERE user_name = %s"
AuthzSVNAccessFile 自行设定访问控制文件位置
Require valid-user
</Location>
这时svn登录可用帐号test,密码123456登录。
注意:
暂时密码只能为明文,试过用.net的MD5加密
“AuthDBDUserPWQuery "SELECT SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',password)),3,32) FROM Apache_Users WHERE user_name = %s" ”
但Apache出错关闭。
参考资料:
2.How-To Authentication through ODBC :: MySQL etc.
3.用 Apache 和 Subversion 搭建安全的版本控制环境