洪布金,余稳定
(四川大学计算机学院,成都 610065)
基于RBAC与ACL的权限控制系统的实现
洪布金,余稳定
(四川大学计算机学院,成都 610065)
实现一个基于RBAC思想与Spring Security ACL模型相结合的权限控制系统,详细阐述该系统的实现原理与工作机制。RBAC与传统的授权策略相比它更加安全、灵活易维护。该系统将RBAC的思想与ACL模型相结合,能达到细粒度的数据级权限访问控制,实践表明,该系统有良好的扩展性与易用性。
RBAC;Spring Security ACL;权限控制;数据级访问控制;细粒度
随着互联网与计算机的高速发展,Web系统应用越来越广泛,在带来方便的同时也增加了各种各样的攻击与信息的窃取,尤其是对一些信息比较敏感的系统,信息一旦遭到非法访问,将造成很大的损失,对资源的访问控制越来越成为一个系统的核心功能。基于角色的访问控制(RBAC)由于其简单性、易扩展性使其成为业界广泛接受和应用的授权参考模型[1~3]。RBAC在用户与资源之间增加角色层,由于角色的变更的频率相对于用户的变更频率要低,通过给角色授权可以降低授权的复杂度,易于维护。随着应用的复杂度不同,对资源的访问控制需求也不相同。RBAC一般能做到URL级别与页面元素的权限控制,也就是功能级的权限制,但是无法做到数据级的权限访问控制,本文通过将RBAC与访问控制列表ACL相结合,实现了一个达到数据级权限控制的系统[4~5],有很好的可扩展性与易维护性。
美国国家标准与技术研究院(NIST)标准RBAC模型有4个部件模型组成[1],这4个模型组件分别是基本模型(RBAC0)、型(RBAC1)、(RBAC2)和同一模型(RBAC3),其中应用最为广泛的为RBAC0,本系统就是在RBAC0的基础上进行扩展,RBAC0的模型如图1所示。
图1 RBAC0模型
RBAC0主要包括5个元素,即用户(user)、角色(role)、目标(object)、操作(operation)以及许可权限(permission)。系统通过给角色授权而不是给用户授权,再将角色与用户关联起来,这样用户就获得了角色被授予的权限。当用户登录系统的时候,通过session会话激活用户所属的角色,来获得对系统的访问控制。由于角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,减少了授权管理的复杂性,降低管理开销。
访问控制列表(ACL)是针对数据级的权限访问控制而提出来的,由于应用的复杂度不同,某些应用需要对实体对象进行访问控制,例如在一家公司,业务员都拥有相同的页面,但是只有被授权的用户才能看到相应的报表。Spring Security提供了对访问控制列表的实现[6],采用Spring Security的实现可以方便地对系统中的领域对象设置不同的权限。ACL主要包括4个基本的对象,它们之间的关系如图2所示,箭头指向代表被参照的一方:
图2 ACL实体对象之间的关系
(1)ACL_SID:标识授权的主体,一般来说是访问系统的用户,是权限的授予者。
(2)ACL_OBJECT_IDENTITY:系统中的领域对象,也就是被访问控制的对象。
(3)ACL_ENTRY:系统中被访问控制对象的访问规则,即一个用户对一个对象的操作权限。
(4)ACL_CLASS:表示系统中访问控制对象的类的全限定名。
上述4个实体对象对应着数据库中的4张表,当用户创建一个实体对象的时候,系统会在上述4张表中插入关于这个对象的访问控制信息。用户访问一个实体对象的时候会根据这4张表中的信息做出相应的判断。
根据RBAC与ACL的模型,设计出系统的核心对象模型,如图3所示。
为了突出权限控制的重点部分,此数据库模型简化了真实数据库中的一些字段,其中箭头指向的一方代表被参照的一方。下面就模型中的一些重要的对象以及它们之间的关系进行一些说明:
部门:部门是企业实现组织机构的一个抽象。部门并非孤立存在,而是和权限紧密联系。此处的部门并非实际业务系统中的部门,而是为了权限管理模块单独抽象出来的一个概念,将用户与角色都与之关联,根据权限的静态分离原则[7],只有角色与用户在同一个部门下才能将角色赋给用户。
图3 数据库模型
用户:登录系统的使用者,这是一个逻辑抽象的概念。在本系统中,人员分为业务人员与管理人员,人员隶属于部门。现实中的人可以拥有系统中的一个或者多个用户。
角色:角色是现实中某一个职位或者岗位的职责与权利的抽象,是为了解耦授权的复杂度而抽象出来的逻辑概念,在本系统中角色分为业务角色与管理角色,与人员的类型相对应,同一类型的角色与人员才能相互关联,角色也隶属于部门。
ACL_SID,即安全对象,是系统中的授权主体,将ACL_SID与用户表进行关联,可以控制用户对领域对象的访问。ACL_CLAS与ACL_OBJECT_IDENTITY唯一标识系统中的实体对象。ACL_ENTRY是实体对象的访问规则。
资源:资源即系统中将被用户操作与访问的对象,在本系统中资源主要包括菜单、菜单页面对应的UI元素以及实体对象。
权限即主体拥有的对客体资源进行可进行操作的集合。为了防止权限的扩散,根据最小特权的原则,在本系统中权限可以分为两类:业务权限与管理权限,其中业务权限即用户直接通过角色间接拥有的菜单权限,用户登录后便可看到对应的功能菜单并处理相关的模块业务;管理权限是系统管理人员通过管理角色拥有管理角色后,则管理人员可以给其他的业务人员授予业务权限。
该模型中的主要关系有:分配资源操作RA(Resource Assignment)、分配用户权限PA(Privilege Assignment)、分配角色到部门RDA(Role Department Assignment)、分配用户到部门UDA(User Department Assignment),如图4所示。
图4 对象关系
分配资源RA,主要涉及到URL资源以及页面元素资源以及实体对象,分配URL资源到角色,分配页面元素到相关的menu,创建实体对象。
分配权限PA,将角色关联到用户,实现用户与角色映射。UDA,实现用户与部门的映射,RDA实现角色与部门的映射,这样可以做到权限的静态分离。只有属于同一个部门的角色与用户才能相互映射。
3.1 功能级权限访问控制实现
权限的控制主要分为功能级访问控制以及数据级访问控制,其中功能级的访问控制主要通过前台来实现,其控制流程如图5所示。
图5 功能级权限控制流程图
每个用户都拥有一个或者几个角色,在用户登录系统的时候,用户通过用户名与密码的验证后,激活会话,系统对用户的角色进行判断,根据用户的角色信息去后台加载用户所拥有的URL信息,返回前台生成功能树的树形接口入口点。当用户通过功能树访问系统中页面的时候,系统会根据用户的角色生成对应的UI元素控制表,用户进入界面后,根据UI元素控制表能够控制该用户所对应的各个界面存在的UI元素,达到对用户访问系统资源的控制。采用上述管理方式,可以比较好地解决功能级权限的访问控制,在满足安全性要求前提下,简化了人员角色指派和管理工作。但是在系统演化阶段可能需要对实体对象进行相应的访问控制,该模型无法满足要求,下面将分析数据级权限的控制实现。
3.2 数据级权限访问控制实现
对于数据级的访问控制是通过ACL来实现的,ACL定义了用户对实体对象的访问规则,当用户访问实体对象的时候是通过方法来调用的,所以要对实体对象进行访问控制,必须要在访问的调用前根据ACL里的规则进行逻辑判断,判断用户时候拥有对实体对象的权限,但是这种设计对于简单的系统还是可以接受的,对于复杂的系统,用户的访问控制策略频繁地变化,会导致用户权限的判断逻辑不停地改变,而且容易导致方法内的逻辑混乱。
(1)AOP简介
对于这种横切关注点问题,可以使用AOP(Aspect Oriented Programming)技术很好地解决这个问题[9~10]。在面向对象的程序开发与设计中,人们发现在模块化单元中,某些逻辑总是共有的,而且这些业务逻辑与系统的核心业务逻辑的关联性很弱,它们留在模块中是因为外部需求强加给核心模块的,例如:日志、权限、事物等。那么,把这些共有的逻辑从模块中剥离出来,再在适当的时候注入回去,将会明显地改善模块的可读性与重用性。
(2)AOP实现的权限管理
通过ACL定义了实体对象的访问控制规则,将对这些规则的判断逻辑从方法的业务逻辑代码里分离出来,定义成一个一个切面,而当对这些切面进行修改的时候,也不会改变方法内的业务逻辑。下面给出一个简单的切面流程图,如图6所示。
图6 切面流程图
AspectJ是目前应用最广泛的AOP语言[10],它既是AOP的语言规范也是AOP的实现。把系统中所有对实体对象的访问方法都集中到一个包下,然后利用AspectJ定义对这个包下的方法访问的切面的Pointcut,就可以达到对实体对象的访问控制,例如:我们把对工资对象访问的方法都放在com.mycompany.service包中,这样可以为这些访问工资的方法,定义Pointcut了:
最后引入AspectJ代码;利用around()的Advice,而Advice就是通过读取ACL里的规则来判断用户的访问权限。
这样修改工资的方法,判断用户的权限的代码全部分离出来,所有的关于权限判断的代码通过Aspect来定义,将修改工资的方法完全与权限的判断解耦了,当系统中的访问控制策略发生变化时,只需要修改Aspect中的代码,而具体的业务逻辑代码无需修改。
本文论述了一种基于RBAC与ACL相结合的模型,通过AOP来实现数据级访问控制的系统。实践表明,采用基于RBAC模型的权限管理具有以下优势:由于角色/权限之间的变化比角色/用户之间的变化要缓慢得多,减少了授权管理的复杂性,降低了管理开销;而且通过ACL与AOP的结合,实现了数据级的访问控制,能够灵活地支持应用系统的安全策略,并对系统的变化有很大的伸缩性,在操作上,权限的分配直观,易于理解使用。
[1] Sandhu R.S.Role-Based Access Control Models[J].IEEE Computer,1996,29(2):38~47
[2] 徐震,李斓,冯登国.基于角色的受限委托模型[J].软件学报,2005,16(5):970~978
[3] 钟华,冯玉琳,姜洪安.扩充角色层次关系模型及其应用[J].软件学报,2000,11(6):779~784
[4] 唐建,徐罡,许舒人.一种数据级安全访问控制方案[J].计算机系统应用,2013,22(9):81~85
[5] 冯志亮,谭景信.分级的行列级权限系统的设计与实现[J].计算机工程与设计,2011,32(10):3274~3277
[6] Domain Object Security(ACLs).Security(ACLs).http://docs.spring.io/springsecurity/site/docs/3.2.4.RELEASE/reference/htmlsingle
[7] 肖璐.基于RBAC的责任分离机制的研究与实现[D].北京交通大学,2008
[8] 胡和平.基于J2EE的权限管理框架实现[J].计算机工程与科学,2007,29(6):109~112
[9] 刘天阳.AOP与权限控制研究[D].大连理工大学,2005
[10] The Aspect J Developer's Notebook.http://www.eclipse.org/aspectj/doc/released/adknotebook/index.html
Implementation of Access Control System Based on RBAC and ACL
HONG Bu-jin,YU Wen-ding
(Department of Computer Science,Sichuan University,Chengdu 610065)
Implements an access control system based on the combination of RBAC and Spring Security ACL,describes the principle and mechanism of the system in details.Compares with traditional authorization policy,RBAC ismore secure,flexible and easier tomaintain.Combines the system the ideological of RBAC with AC Lmodel phase,achieves the data level permissions fine-grained access control.Practice shows that,ithas good scalability and ease of use.
RBAC;Spring Security ACL;Access Control;Data-Level Access Control;Fine-Gained
1007-1423(2015)07-0045-05
10.3969/j.issn.1007-1423.2015.07.013
洪布金(1989-),男,安徽芜湖人,硕士研究生,研究方向为网络与信息安全
余稳定(1989-),男,安徽六安人,硕士研究生,研究方向为网络与信息安全
2014-12-30
2015-02-01