何晓园
摘 要:该文介绍了一种基于角色的访问控制机制,提供了资源访问控制、用户隔离以及等级划分等通用功能,实现后可以作为一个模块挂接到一个应用系统当中,该系统只需要调用其提供的API即可使用其功能,由于使用了面向对象的编程方式,其所有功能都在一个基类里面提供,开发人员可以通过继承、派生的方式扩充其功能。在实际应用中验证了其具有通用性、较好的扩展性以及较高的性能。
关键词:角色 权限 访问控制
中图分类号:TP393 文献标识码:A 文章编号:1674-098X(2015)11(a)-0156-02
基于角色的访问控制机制(RBAC:Role-Based Access Control)是目前较为常用的一种访问权限控制机制,如ORACLE、SQL Server著名的系统都使用这种方式进行访问控制,权限与角色相关联,用户通过扮演不同的角色从而获得授予角色的权限,极大地简化了权限的管理工作。这些机制通常都遵循最小授权,责任分离和数据抽象这三个基本原则,并且具有很多相似的地方。该文介绍了一种RBAC机制,下文简称UPAC,实现了RBAC机制中大部分通用的功能,在实际应用中可以把UPAC当成一个架构进行扩充,也可以直接使用其API进行开发工作。使用UPAC的系统(下文简称调用系统)只需要将UPAC作为一个模块挂接到调用系统当中,就可以使用其功能。
1 系统的构成
UPAC主要由用户、角色、对象、模块和访问权限这5个元素构成,这些元素相互作用构成一套完整的权限控制机制。
用户是最小的授权单元,用户具有账号、密码、域以及等级等基本属性,在实际应用中用户的属性可以由调用系统扩充。系统的使用者,例如普通用户和管理员等都是通过用户的账号获得访问系统的权限的。
2 访问权限
在UPAC中,访问权限只是被当成一些整数,其代表的实际意义由调用系统进行解释。访问权限作用于模块和对象这两种访问单元。UPAC负责获取某个访问单元的访问权限值,然后将该值返回给调用系统。
UPAC的访问权限是累加的关系,主要体现在两个方面。
(1)角色与用户:一个用户所具有的权限为其本身被授予的权限加上其加入的所有角色的权限。
(2)模块与对象:如果一个授权单元具有了一个模块的某种访问权限,那么该授权单元就具有了该模块所有对象的相同的访问权限,如果单独再对这个授权单元进行了模块中的对象的授权,那么该授权单元对该对象具有的访问权限为其对模块的访问权限加上对该对象的访问权限。
从文中可以看出,UPAC只是按照规则提供了为各种元素提供了相互之间的关联,并没有对各个元素赋予任何的实际意义,这使得UPAC可以独立于任何系统,而调用系统由于不需要再处理这些元素之间的关系,简化了其权限系统的设计。
3 用户
在UPAC中用户是访问系统资源的唯一依据,用户登录后,通过其本身授予的权限和其所加入的角色的所获得的权限对系统资源进行访问。UPAC中用户的基本属性只有5个,如图1所示。
账号和密码用于登录,等级用于控制用户等级的高低,域用于控制用户相互之间的可见性。
需要注意的是,上面提到的系统资源的访问权限与用户等级之间没有必然的联系,等级高的用户并不一定比等级低的用户对某个资源具有更多的访问权限,它们之间的关系由调用系统确定。
UPAC的用户等级属性是一个正整数,数字越大表示等级越高,具体意义也由调用系统决定。例如为了简单起见调用系统可以在实现中通过程序指定将所有的系统资源的所有访问权限赋予等级为系统管理员的用户,从而使得系统管理员不受RBAC规则的限制。
域属性指定了用户所在的“域”,这个属性用来控制用户之间的可见性,域属性值相同的用户处于同一个“域”中,他们相互之间是可见的,而处于不同的“域”之中的用户,相互之间是不可见的。例如,在一个ERP系统中,财务部的部门的员工可以看到该部门中的所有员工,但是却不能看到人事部的员工,就可以通过为这两个部门的员工赋予不同的域属性来进行控制。
另外,等级和域属性可以相互结合,以实现更多的功能,例如,要求部门经理级别的用户都可以看到整个企业所有的员工,尽管每个部门经理的域属性都不相同,但是此时可以根据等级属性来进行控制。
ID是一个用户在UPAC中的一个整数类型的唯一标识符,由UPAC使用,对于调用系统不可见。使用ID的原因是由于整数检索速度更快。
4 API
UPAC通过面向对象的方法实现,通过类的成员函数为调用系统提供了API,并且调用系统可以通过UPAC的基类派生出自己的子类,从而扩充UPAC的功能。UPAC提供的API如表1所示。
其中HasModulePrivileges、GetModulePrivileges、HasObjectPrivileges和GetObjectPrivileges这四个函数会自动处理用户所属的角色的权限问题。
UPAC只提供了基本的API函数,但是却提供了RBAC的最常用的功能,使得调用系统不需要考虑RBAC中的最难处理的权限获取的问题。
5 结语
UPAC定义了用户、角色、模块、对象和访问权限等元素,实现了各元素之间的关系的处理、关系数据的保存和检索功能,并且给调用系统提供了灵活的扩展机制,调用系统只需要在UPAC的基础上进行少量的工作就可以实现一个个性化的RBAC机制。UPAC已经在多个项目使用,验证了其具有较好的扩展性、灵活性以及较高的性能。
参考文献
[1] 李志英,黄强,楼新远,等.RBAC模型研究、改进与实现[J].计算机应用,2006,26(12):2945-2947.
[2] 唐守利.基于RBAC的粒度访问控制模型研究[J].信息系统工程,2010(9):125,133.
[3] 梁泽梅,李蜀瑜.基于RBAC的两级访问控制模型[J].微型电脑应用,2011,27(3):54-56.