(1)用户、角色、许可
基于角色访问控制的要素包括用户、角色、许可等基本定义。
在RBAC中,用户就是一个可以独立访问计算机系统中的数据或者用数据表示的其他资源的主体。角色是指一个组织或任务中的工作或者位置,它代表了一种权利、资格和责任。许可(特权)就是允许对一个或多个客体执行的操作。一个用户可经授权而拥有多个角色,一个角色可由多个用户构成;每个角色可拥有多种许可,每个许可也可授权给多个不同的角色。每个操作可施加于多个客体(受控对象),每个客体也可以接受多个操作。
图8.3 用户、角色、许可的关系
用户表(USERS)包括用户标识、用户姓名、用户登录密码。用户表是系统中的个体用户集,随用户的添加与删除动态变化。
角色表(ROLES)包括角色标识、角色名称、角色基数、角色可用标识。角色表是系统角色集,由系统管理员定义角色。
客体表(OBJECTS)包括对象标识、对象名称。客体表是系统中所有受控对象的集合。
操作算子表(OPERATIONS)包括操作标识、操作算子名称。系统中所有受控对象的操作算子构成操作算子表。
许可表(PERMISSIONS)包括许可标识、许可名称、受控对象、操作标识。许可表给出了受控对象与操作算子的对应关系。
角色/许可授权表包括角色标识、许可标识。系统管理员通过为角色分配或取消许可管理角色/许可授权表。
RBAC的基本思想是:授权给用户的访问权限,通常由用户在一个组织中担当的角色来确定。RBAC中许可被授权给角色,角色被授权给用户,用户不直接与许可关联。RBAC对访问权限的授权由管理员统一管理,RBAC根据用户在组织内所处的角色作出访问授权与控制,授权规定是强加给用户的,用户不能自主地将访问权限传给他人,这是一种非自主型集中式访问控制方式。例如,在医院里,医生这个角色可以开处方,但他无权将开处方的权力传给护士。
在RBAC中,用户标识对于身份认证以及审计记录是十分有用的;但真正决定访问权限的是用户对应的角色标识。用户能够对一客体执行访问操作的必要条件是,该用户被授权了一定的角色,其中有一个在当前时刻处于活跃状态,而且这个角色对客体拥有相应的访问权限。即RBAC以角色作为访问控制的主体,用户以什么样的角色对资源进行访问,决定了用户可执行何种操作。
ACL直接将主体和受控客体相联系,而RBAC在中间加入了角色,通过角色沟通主体与客体。分层的优点是当主体发生变化时,只需修改主体与角色之间的关联而不必修改角色与客体的关联。
(2)角色继承
为了提高效率,避免相同权限的重复设置,RBAC采用了“角色继承”的概念。定义了这样的一些角色,它们有自己的属性,但可能还继承其他角色的许可。角色继承把角色组织起来,能够很自然地反映组织内部人员之间的职权、责任关系。角色继承可以用祖先关系来表示。如图所示,角色2是角色1的“父亲”,它包含角色1的许可。在角色继承关系图中,处于最上面的角色拥有最大的访问权限,越下端的角色拥有的权限越小。
图8.4角色继承的实例
角色层次表包括上一级角色标识、下一级角色标识。上一级角色能够继承下一级角色的许可。
(3)角色分配与授权
用户/角色分配表包括用户标识、角色标识。系统管理员通过为用户分配角色、取消用户的某个角色等操作管理用户/角色分配表。
用户/角色授权表包括用户标识、角色标识、可用性。我们称一个角色r授权给一个用户u要么是角色r分配给用户u,要么是角色r通过一个分配给用户u的角色继承而来。用户/角色授权表记录了用户通过用户/角色分配表以及角色继承而取得的所有角色。可用性为真时,用户才真正可以使用该角色赋予的许可。
(4)角色限制
角色限制包括角色互斥与角色基数限制。
对于某些特定的操作集,某一个用户不可能同时独立地完成所有这些操作。角色互斥可以有静态和动态两种实现方式。静态角色互斥:只有当一个角色与用户所属的其他角色彼此不互斥时,这个角色才能授权给该用户。动态角色互斥:只有当一个角色与一主体的任何一个当前活跃角色都不互斥时,该角色才能成为该主体的另一个活跃角色。
静态互斥角色表包括角色标识1、角色标识2。系统管理员为用户添加角色时参考。
动态互斥角色表包括角色标识1、角色标识2。在用户创建会话选择活跃角色集时参考。
角色基数限制是指在创建角色时,要指定角色的基数。在一个特定的时间段内,有一些角色只能由一定人数的用户占用。
(5)角色激活
用户是一个静态的概念,会话则是一个动态的概念。一次会话是用户的一个活跃进程,它代表用户与系统交互。用户与会话是一对多关系,一个用户可同时打开多个会话。一个会话构成一个用户到多个角色的映射,即会话激活了用户授权角色集的某个子集,这个子集称为活跃角色集。活跃角色集决定了本次会话的许可集。
会话表包括会话标识、用户标识。
会话的活跃角色表包括会话标识、角色标识。