当初按照网上的一篇文章装完SVN后,很长一段时间都以为Apache+Subversion是必须的组合,认为Subversion生来就是通过Http访问的,直到最近同一个项目参与开发的人增多后,感觉SSPI认证不能满足一些要求,才开始进一步研究SVN。
当然,下面的认识仍然很初步
当然,下面的认识仍然很初步
Subversion的权限控制有3种方式:
- SSPI(windows帐号管理)(缺点非常明显:能够访问SVN的帐号也能够访问Windows服务器)
- Apatch password机制(密码是经过Apatch加密的)
- svnserver(精细路径授权,但密码是明码的)
认证与授权:
-
认证:验证用户输入的用户名和密码是否正确
-
授权:将哪些文件和文件夹的读或写权限开放给已经认证的用户。
上述3种认证方式对应着3种授权方式。
-
SSPI认证通过后,无法精细路径授权,对所有资料库都是可读写的;
-
Apache HTTP认证通过后(使用Apache密码文件), 通过Apache调用一个模块(mod_authz_svn.so)验证“httpd.conf文件中 AuthzSVNAccessFile 属性指定的文件进行授权;
-
Svnserve认证通过后(使用svnserve.conf中指定的passwd文件),使用svnserve自己的授权方式调用svnserve.conf中指定的authz文件进行授权。
已知的HTTP授权和svnserve授权是不同的,但是,虽然授权模块不同,授权文件却是可以指向一个的,因为在Subversion文档中定义方式完全一样。
经过几次摸索,我感觉如下实现是比较合适的:
用户使用浏览器通过Http访问资料库,使用guest 帐号,权限只读不能写,为的是方便浏览,扩大受众。
用户使用客户端通过svn 访问资料库,精细路径授权,用于开发。
这样,我最终放弃了SSPI认证,而使用HTTP + svnserve 认证方式。
最后,再画一副图来表示,图中具体含义需要参考相关文档来理解。