返回 科技论文 首页
基于RBAC与ACL的权限控制系统的实现

  摘要:实现一个基于RBAC思想与Spring Security ACL模型相结合的权限控制系统,详细阐述该系统的实现原理与工作机制。RBAC与传统的授权策略相比它更加安全、灵活易维护。该系统将RBAC的思想与ACL模型相结合,能达到细粒度的数据级权限访问控制,实践表明,该系统有良好的扩展性与易用性。
  关键词:RBAC;Spring Security ACL;权限控制;数据级访问控制;细粒度
  0.引言
  随着互联网与计算机的高速发展,Web系统应用越来越广泛,在带来方便的同时也增加了各种各样的攻击与信息的窃取,尤其是对一些信息比较敏感的系统。信息一旦遭到非法访问,将造成很大的损失,对资源的访问控制越来越成为一个系统的核心功能。基于角色的访问控制(RBAC)由于其简单性、易扩展性使其成为业界广泛接受和应用的授权参考模型。RBAC在用户与资源之间增加角色层,由于角色的变更的频率相对于用户的变更频率要低,通过给角色授权可以降低授权的复杂度,易于维护。随着应用的复杂度不同,对资源的访问控制需求也不相同。RBAC一般能做到URL级别与页面元素的权限控制,也就是功能级的权限制,但是无法做到数据级的权限访问控制,本文通过将RBAC与访问控制列表ACL相结合,实现了一个达到数据级权限控制的系统。有很好的可扩展性与易维护性。
  1.RBAC模型与ACL简述
  美国国家标准与技术研究院(NIST)标准RBAC模型有4个部件模型组成,这4个模型组件分别是基本模型(RBAC0)、型(RBAC1)、(RBAC2)和同一模型(RBAC3)。其中应用最为广泛的为RBAC0,本系统就是在RBAC0的基础上进行扩展,RBAC0的模型如图1所示。
  RBAC0主要包括5个元素,即用户(user)、角色(role)、目标(obiect)、操作(operation)以及许可权限(permission)。系统通过给角色授权而不是给用户授权,再将角色与用户关联起来,这样用户就获得了角色被授予的权限。当用户登录系统的时候。通过session会话激活用户所属的角色。来获得对系统的访问控制。由于角色/6限之间的变化比角色/用户关系之间的变化相对要慢得多,减少了授权管理的复杂性,降低管理开销。
  访问控制列表(ACL)是针对数据级的权限访问控制而提出来的,由于应用的复杂度不同,某些应用需要对实体对象进行访问控制,例如在一家公司。业务员都拥有相同的页面,但是只有被授权的用户才能看到相应的报表。Spring Security提供了对访问控制列表的实现,采用Spring Security的实现可以方便地对系统中的领域对象设置不同的权限。ACL主要包括4个基本的对象,它们之间的关系如图2所示,箭头指向代表被参照的一方:
  (1)ACL SID:标识授权的主体,一般来说是访问系统的用户。是权限的授予者。
  (2)ACLOBJECT IDENTITY:系统中的领域对象,也就是被访问控制的对象。
  (3)ACL ENTRY:系统中被访问控制对象的访问规则,即一个用户对一个对象的操作权限。
  (4)ACL CLASS:表示系统中访问控制对象的类的全限定名。
  上述4个实体对象对应着数据库中的4张表,当用户创建一个实体对象的时候,系统会在上述4张表中插入关于这个对象的访问控制信息。用户访问一个实体对象的时候会根据这4张表中的信息做出相应的判断。
  2.系统的核心对象模型设计
  根据RBAC与ACL的模型,设计出系统的核心对象模型,如图3所示。
  为了突出权限控制的重点部分,此数据库模型简化了真实数据库中的一些字段,其中箭头指向的一方代表被参照的一方。下面就模型中的一些重要的对象以及它们之间的关系进行一些说明:
  部门:部门是企业实现组织机构的一个抽象。部门并非孤立存在,而是和权限紧密联系。此处的部门并非实际业务系统中的部门,而是为了权限管理模块单独抽象出来的一个概念,将用户与角色都与之关联。根据权限的静态分离原则,只有角色与用户在同一个部门下才能将角色赋给用户。
  用户:登录系统的使用者,这是一个逻辑抽象的概念。在本系统中。人员分为业务人员与管理人员。人员隶属于部门。现实中的人可以拥有系统中的一个或者多个用户。
  角色:角色是现实中某一个职位或者岗位的职责与权利的抽象,是为了解耦授权的复杂度而抽象出来的逻辑概念,在本系统中角色分为业务角色与管理角色,与人员的类型相对应。同一类型的角色与人员才能相互关联,角色也隶属于部门。
  ACL SID,即安全对象,是系统中的授权主体,将ACL SID与用户表进行关联,可以控制用户对领域对象的访问。ACLCLAS与ACL_OBJECT_IDEN~TY唯一标识系统中的实体对象。ACL ENTRY是实体对象的访问规则。
  资源:资源即系统中将被用户操作与访问的对象,在本系统中资源主要包括菜单、菜单页面对应的UI元素以及实体对象。
  权限即主体拥有的对客体资源进行可进行操作的集合。为了防止权限的扩散,根据最小特权的原则,在本系统中权限可以分为两类:业务权限与管理权限,其中业务权限即用户直接通过角色间接拥有的菜单权限,用户登录后便可看到对应的功能菜单并处理相关的模块业务:管理权限是系统管理人员通过管理角色拥有管理角色后,则管理人员可以给其他的业务人员授予业务权限。
  该模型中的主要关系有:分配资源操作RA(Resource Assignment)、分配用户权限PA(Privilege Assignment)、分配角色到部门RDA(Role Department Assignment)、分配用户到部门UDA(User Department Assignment),如图4所示。   分配资源RA,主要涉及到URL资源以及页面元素资源以及实体对象,分配URL资源到角色,分配页面元素到相关的menu,创建实体对象。
  分配权限PA,将角色关联到用户,实现用户与角色映射。UDA,实现用户与部门的映射,RDA实现角色与部门的映射,这样可以做到权限的静态分离。只有属于同一个部门的角色与用户才能相互映射。
  3.权限控制的实现
  3.1功能级权限访问控制实现
  权限的控制主要分为功能级访问控制以及数据级访问控制,其中功能级的访问控制主要通过前台来实现,其控制流程如图5所示。
  每个用户都拥有一个或者几个角色,在用户登录系统的时候,用户通过用户名与密码的验证后。激活会话,系统对用户的角色进行判断,根据用户的角色信息去后台加载用户所拥有的URL信息,返回前台生成功能树的树形接口入口点。当用户通过功能树访问系统中页面的时候,系统会根据用户的角色生成对应的UI元素控制表,用户进入界面后,根据UI元素控制表能够控制该用户所对应的各个界面存在的UI元素,达到对用户访问系统资源的控制。采用上述管理方式,可以比较好地解决功能级权限的访问控制,在满足安全性要求前提下,简化了人员角色指派和管理工作。但是在系统演化阶段可能需要对实体对象进行相应的访问控制,该模型无法满足要求,下面将分析数据级权限的控制实现。
  3.2数据级权限访问控制实现
  对于数据级的访问控制是通过ACL来实现的,ACL定义了用户对实体对象的访问规则,当用户访问实体对象的时候是通过方法来调用的,所以要对实体对象进行访问控制,必须要在访问的调用前根据ACL里的规则进行逻辑判断,判断用户时候拥有对实体对象的权限,但是这种设计对于简单的系统还是可以接受的,对于复杂的系统,用户的访问控制策略频繁地变化,会导致用户权限的判断逻辑不停地改变,而且容易导致方法内的逻辑混乱。
  (1)AOP简介
  对于这种横切关注点问题,可以使用AOP(Aspect Oriented Programming)技术很好地解决这个问题。在面向对象的程序开发与设计中,人们发现在模块化单元中,某些逻辑总是共有的。而且这些业务逻辑与系统的核心业务逻辑的关联性很弱,它们留在模块中是因为外部需求强加给核心模块的,例如:日志、权限、事物等。那么,把这些共有的逻辑从模块中剥离出来,再在适当的时候注入回去,将会明显地改善模块的可读性与重用性。
  (2)AOP实现的权限管理
  通过ACL定义了实体对象的访问控制规则,将对这些规则的判断逻辑从方法的业务逻辑代码里分离出来,定义成一个一个切面。而当对这些切面进行修改的时候,也不会改变方法内的业务逻辑。下面给出一个简单的切面流程图。如图6所示。
  AspectJ是目前应用最广泛的AOP语言㈣,它既是AOP的语言规范也是AOP的实现。把系统中所有对实体对象的访问方法都集中到一个包下,然后利用AspectJ定义对这个包下的方法访问的切面的Pointcut,就可以达到对实体对象的访问控制,例如:我们把对工资对象访问的方法都放在com,mycompany,service包中,这样可以为这些访问工资的方法,定义Pointcut了:
  pointcut salaryChange():execution(*.*raiseSalary(,,))
  最后引入AspectJ代码;利用around()的Advice,而Advice就是通过读取ACL里的规则来判断用户的访问权限。
  这样修改工资的方法,判断用户的权限的代码全部分离出来,所有的关于权限判断的代码通过Aspect来定义,将修改工资的方法完全与权限的判断解耦了,当系统中的访问控制策略发生变化时,只需要修改Aspect中的代码,而具体的业务逻辑代码无需修改。
  4.结语
  本文论述了一种基于RBAC与ACL相结合的模型,通过AOP来实现数据级访问控制的系统。实践表明。采用基于RBAC模型的权限管理具有以下优势:由于角色/权限之间的变化比角色/用户之间的变化要缓慢得多,减少了授权管理的复杂性,降低了管理开销;而且通过ACL与AOP的结合,实现了数据级的访问控制。能够灵活地支持应用系统的安全策略,并对系统的变化有很大的伸缩性,在操作上,权限的分配直观,易于理解使用。

【相关论文推荐】
  • 基于RBAC的用户权限管理的研究与实现
  • 基于RBAC的权限管理的设计与实现
  • 基于RBAC的学习流系统权限控制研究
  • 基于RBAC模型权限管理的设计与实现
  • 基于RBAC模型公文流转系统权限管理的设计与实现
  • 基于RBAC的权限控制模型的设计与应用
  • 基于RBAC的权限管理系统设计
  • RBAC在Web考试管理系统权限控制中的设计和实现
  • 基于对象的RBAC权限控制模型在Web系统中的应用
  • 在线服务

    服务承诺