RBAC即Role-based access control,基于角色的访问控制方法。是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:1.减小授权管理的复杂性,降低管理开销;2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。对角色授权即基于角色的访问控制(RBAC)。RBAC在主体和权限之间增加了一个中间桥梁——角色。角色可以看作是一组操作的集合,不同的角色具有不同的操作集,这些操作由系统管理员分配给角色。用户的授权是通过授予用户一个角色来实现的,即赋予用户一个角色,一个用户可以承担不同的角色,从而实现授权的灵活性。
权限被授予角色,而管理员通过指定用户为特定角色来为用户授权;从而大大简化授权管理,减少授权管理的复杂性,降低管理开销,使权限管理系统具有强大的可操作性和可管理性。角色可以根据组织中的不同工作创建,然后根据用户的责任和资格分配角色,用户可以轻松地进行角色转换。而且随着新应用和新系统的增加,角色可以分配更多的权限,也可以根据需要撤销相应的权限。从而灵活地支持企业的安全策略,并对企业的变化有了很大的伸缩性。
RBAC属于策略中立的访问控制模型,既可以实现自主存取控制策略(DAC),又可以实现强制存取控制策略(MAC),可以有效缓解传统安全管理处理瓶颈问题,被认为是一种普通适用的访问控制模型,尤其适用于大型组织的统一资源有效的访问控制机制。
美国国家标准与技术研究院(The National Institute of Standards and Technology)标准的RBAC模型由4个部件模型组成,这4个部件模型分别是基本模型RBAC0(Core RBAC)、角色分级模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC)。
RBAC0
定义了能构成一个RBAC控制系统的最小的元素集合。在RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权permissions(PRMS)五个基本数据元素,权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的权限。会话sessions是用户与激活的角色集合之间的映射。RBAC0与传统访问控制(ACL)的差别在于增加一层间接性带来了灵活性,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。RBAC0的模型如下图:
用户(User):代表人,也可以是一台机器、agent、或者其他任何智能型物品。
角色(Role):表示一个工作职责,在一个组织机构环境中的工作职责。该职责可以关联一些关于权力和责任的语义。
权限(Permission):是一个许可,对在一个或多个对象上执行操作的许可。如:“一个文档”不是权限,“删除”也不是权限,只有“对文档的删除”才是权限。由于RBAC标准定义的权限是正向授权(正权限),并没有禁止负向授权(负权限),因此可以自定义负权限。正向授权在开始时假定主体没有任何权限,然后根据需要授予权限,适合于权限要求严格的系统。负向授权在开始时假定主体有所有权限,然后将某些特殊权限收回。
操作(Operation):是程序的可执行的反映(image),被用户调用和执行。操作的类型取决于实现系统的类型。
对象(Object):表示资源(Resource)或目标,任何访问控制机制都是为了保护系统的资源。对象包括:文件、目录,数据库表、行、字段,磁盘空间,打印机,甚至CPU周期等。
会话(Session)在RBAC0中是比较隐晦的一个元素。RBAC标准定义:每个会话是一个映射,一个用户到多个角色的映射。当一个用户激活他所有角色的一个子集时,建立一个会话。每个会话和单个用户关联,每个用户可以关联到一个或多个会话。当用户执行一段过程(Process)或一个动作(Action)时,将使用到相关的Role(所有Role的子集);这个过程就可以称为一个会话。
RBAC1
RBAC1引入角色间的继承关系,角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。角色继承时继承角色的所有操作权限。RBAC1模型如下图:
角色继承用于解决复杂组织机构之间的权限关系。它是一种“很自然地”对组织机构层次中权限和责任的映射。如:总经理→部门经理→业务员。角色继承的方向和用户的关系方向相反,即权限最小的在顶端:业务员→部门经理→总经理。如:若所有role_salesman(业务员)的权限都是role_Mgr(经理)的权限,那么role_Mgr继承自role_salesman。
RBAC2
模型中添加了责任分离关系。RBAC2的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可。 RBAC2模型如下图:
RBAC标准定义:职责关系分离(SoD)用于增强利益冲突策略,这种策略某些组织机构可能会需要,即避免用户超出其当前职位合理的权限等级。简单地说,就是避免两个角色间的冲突。如:会计和出纳,在一般公司都不允许同一个人兼任。因此在分配角色的时候,应该禁止这两种角色赋给同一人。
静态责任分离(SSD),即在系统初始化时,当角色授给用户时来判断是否将冲突的角色给了同一用户。在RBAC标准中,冲突的角色被定义为一个二元关系,就是说,任何一个用户只能拥有其中的一个。
动态责任分离(DSD),指相冲突的角色可以同时给一个,但是在一次会话中不能同时扮演两个冲突的角色。如:在超市POS系统中,ywf可以是收银员或收银员主管(ROLE)。收银员必须经过主管才能打开收银机的抽屉修改某次结账错误。如果收银员角色的一个单独的行为中需要从收银员切换到主管,那么DSD要求,这个用户(USER)必须先放弃收银员角色;即,当该收银员正在收银时发现错误,必须要先关闭抽屉,然后再次以主管身份打开抽屉才行。
RBAC3
包含了RBAC1和RBAC2,既提供了角色间的继承关系,有提供了责任分离关系。RBAC3模型如下图:
一种对RBAC改进的访问控制权限模型:
RBAC) 是目前公认的解决大型企业的统一资源访问控制的有效方法。然而某些情况下需要对某个用户授予特殊的权限时,RBAC就显得有些不够灵活,如果授予用户所拥有的某种角色,则拥有该角色的所有用户都会拥有该权限或被授予角色的用户会拥有该角色的所有权限,显然这不符合需求,如果为了实现这一需求而单独创建一个角色又显得不合常理,因此,改进的访问控制模型综合了RBAC的理论,结合企业需要单独对用户授予权限的需要,设计了既可对角色授权又可对用户单独授权的访问控制模型如下图:
用户角色优先级:是指当给一个用户赋予多个角色时,角色之间有冲突的权限处理,高优先级的角色权限覆盖低优先级的角色权限,如一个员工既是系统管理员,又是研发人员,则对于系统管理的权限,系统管理员角色的权限覆盖研发人员角色权限。
这种既可以对角色授权,又可以对用户授权的模型中,如果用户和角色之间的权限冲突时,也需要制定权限优先级。