RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制。RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What(Which)进行How的操作,也就是“主体”对“客体”的操作,其中who——是权限的拥有者或主体(如:User、Role),what——是资源或对象(Resource、Class)
RBAC其实是一种分析模型,主要分为:基本模型RBAC0(Core RBAC)、角色分层模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC)。
1)RBAC0
RBAC0,它是RBAC0的核心,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。RBAC0定义了能构成RBAC控制系统的最小的元素集合,RBAC0由四部分构成:
a、用户(User)
b、角色(Role)
c、会话(Session)
d、许可(Pemission),其中许可又包括“操作”和“控制对象”其中许可被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的许可。会话是动态的概念,用户必须通过会话才可以设置角色,是用户与激活的角色之间的映射关系。
图中,用户与角色是多对多的关系;角色和许可也是多对多的关系;用户与会话是一对一关系;会话与角色是一对多关系;
2)RBAC1
RBAC1,它是RBAC角色的分层模型,RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念,有了继承那么角色就有了上下级或者等级关系
3)RBAC2
RBAC2,它是RBAC的约束模型,RBAC2也是建立的RBAC0的基础之上的,在RBAC0基础上假如了约束的概念,主要引入了静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。
SSD是用户和角色的指派阶段加入的,主要是对用户和角色有如下约束:
a、互斥角色:同一个用户在两个互斥角色中只能选择一个
b、基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的
c、先决条件约束:用户想要获得高级角色,首先必须拥有低级角色
DSD是会话和角色之间的约束,可以动态的约束用户拥有的角色,如一个用户可以拥有两个角色,但是运行时只能激活一个角色。
4)RBAC3
RBAC3,它是RBAC1与RBAC2合集,所以RBAC3是既有角色分层又有约束的一种模型
以上就是RBAC模型的四种设计思想,现在我们用的权限模型都是在RBAC模型的基础上根据自己的业务进行组合和改进。