技术开发 频道

Subversion高级应用:SVN的多种认证方式

  【IT168 技术文档】摘要:详细讲解了在Windows下Subversion版本控制的多种认证方式。特别分析了怎么用MySQL数据库认证Subversion。其中,集成用户文件(UserFile)认证和MySQL数据库认证是我的心得所在。

  目录

  一、安装 ApacheSVN 服务器

  1、必备条件

  2、安装

  3、基本的Apache配置

  二、认证选项

  1、基本 HTTP 认证

  2、用 mod_authz_svn 进行目录访问控制

  3、用MySQL认证Subversion

  4、集成用户文件(UserFile)认证和MySQL数据库认证

  三、FAQ

  ------------------------------------------------------------------分 割 线-----------------------------------------------------------------

  一、安装 ApacheSVN 服务器

  通过 Http 协议访问版本库是 Subversion 的亮点之一。ApacheSVN 服务器具备了许多 svnserve 服务器没有的特性,使用上更加灵活,但是有一点难于配置,灵活通常会带来复杂性。

  由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用 WebDAV(Web-based Distributed Authoring and Versioning:)Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,可以参考 IETF RFC 2518 (http://www.ietf.org/rfc/rfc2518.txt)。

  1、必备条件

  为了让你的版本库使用HTTP网络,你必需具备以下几个条件:

  (1)配置好httpd 2.2.x,并且使用mod_dav启动。

  (2)为mod_dav安装mod_dav_svn插件。

  (3)配置你的httpd.conf,使http协议能访问版本库。

  下面以我的配置过程详细讲解。

  环境:

  OS:Windows XP SP2

  Web:Apache 2.2.6

  SVN:svn-win32-1.4.6

  2、安装

  (1)安装Apache

  具体安装方法见我写的《Windows下安装Apache 2.2.x》一文。

  (2)安装 Subversion

  将下载下来的 svn-win32-1.4.6.zip 直接解压即可,比如我解压到 e:\subversion 。

  从Subversion安装目录的 bin 子目录将 intl3_svn.dll、libdb44.dll、mod_authz_svn.so、mod_dav_svn.so 拷贝到Apache的模块目录(Apache 安装目录的 modules 文件夹)。

  3、基本的Apache配置

  修改Apache的配置文件 httpd.conf ,使用LoadModule来加载mod_dav_svn模块。

  将: 

  #LoadModule dav_module modules/mod_dav.so

  改成: 

  LoadModule dav_module modules/mod_dav.so

  即去掉前面的“#”号。

  添加: 

  LoadModule dav_svn_module modules/mod_dav_svn.so

  注意:一定确定它在 mod_dav 之后。

  现在你已经设置了Apache和Subversion,但是Apache不知道如何处理Subversion客户端,例如TortoiseSVN。为了让Apache知道哪个目录是用来作为Subversion版本库,你需要使用编辑器(例如记事本)编辑Apache的配置文件。

  在配置文件最后添加如下几行:  

<Location /repository/>
  DAV svn
  SVNPath e:
/svn/repos1
</Location>

  这个配置告诉Apache首先需要启用 dav_module,然后加载 dav_svn_module 。版本库对外的URL是:http://服务器IP/repository/ ,所有的Subversion版本库在物理上位于e:/svn/repos1/ 。

  配置完毕后重新启动 Apache,打开浏览器,输入 http://服务器IP/ repository/ 将会看到如下画面:

  

图1 连接成功

  这表示 Apache 的 dav_svn 模块已经可以正常工作了。用户可以使用任何一种 Subversion 的客户端通过 Http 协议访问你的版本库。

  如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替 SVNPath,例如在 e:\svn 下有多个版本库 repos1,repos2 等等,用如下方式指定:

<Location /repository/>
 DAV svn
 SVNParentPath e:
/svn
</Location>

  “SVNParentPath e:/svn ” 表示 e:\svn 下的每个子目录都是一个版本库。可以通过 http://服务器IP/repository/repos1/,http://服务器IP/repository/repos2/ 来访问。

  现在你的版本库任何人都可以访问,并且有完全的写操作权限。也就是说任何人都可以匿名读取,修改,提交,以及删除版本库中的内容(注:这时不需要配置E:\svn\repos\conf\svnserve.conf 文件,并且也不需要启动E:\subversion\bin\svnserve.exe。因为提交是通过Apache的dav模块处理的,而不是由svnservice处理。)。我们用 TortoiseSVN 客户端验证即知。

  显然大部分场合这是不符合需求的。那么如何进行权限设置呢,Apache 提供了多种认证方式来实现权限设置。

 

0
相关文章