基本信息
用户单位:某大型软件企业
用户规模:500人以上
组织过程水平:中等
CMMI评审等级:3级
Subversion使用时间:2年
客户需求
该公司对Subversion访问控制的需求主要包括
1、精细化的授权体系
其相关需求和上一案例:Subversion实践案例——精细化的访问控制(一)基本相同
2、特殊的访问控制需求
a、对IP来源的控制,即只允许若干特定IP段的访问来源进行访问
b、对访问时间的控制,即只允许若干时间段内进行访问
c、上述二点需求可以根据不同的用户、项目及角色信息等进行设定
问题解析
该客户的第一点需求已经在上一案例中很好的解决了,但第二点需求则无法用访问控制文件+钩子的方式来进行控制,因为对于访问的IP来源的控制这两种技术手段都无能为力,而至于对访问时间的控制虽然钩子可以比较好的实现,但访问控制文件的实时更新(需随着时间、用户等信息进行自动更新)显然又需要在服务器端添加一个系统服务——显然这不是个好方法。
因此,需要在上述两种技术手段之外寻找途径。好在用户的Subversion是通过在Apache服务器来部署的,所以可以通过添加额外的Apache模组来实现相关的控制。 相对来说,这是一种较为底层的实现方式,理论上可以实现任何的访问控制,所以添加了Apache模组后,访问控制文件和钩子都可以不再使用,而访问的效率也可以因此有所提高。
我们的解决方案
我们提供的解决方案如下图所示:
如上图所示:所有的访问请求都被附加的Apache模组截获,并由其向规则验证服务(Service)发送验证请求,并通过验证规则对其进行验证(验证的内容可以包括IP来源和系统时间),然后将验证被允许的访问发生给服务器上的配置库,而验证拒绝的访问请求则直接返回错误。