获得信息的能力或需求可能取决于一个人的工作性质。
示例:Allison是数学系的会计师。她负责财政收支平衡和跟踪该数学系的所有账单。她可以访问所有部门的账户。她转到该大学的招生办公室成为了会计部门的主任(有实质性的提高)。由于她不再是数学系的会计师,所以她不能够访问数学系的账户。当该系雇佣Sally作为其新的会计师,她将获得所有账户的访问权限。访问账户是会计员的工作智能,并不依赖于任何特定的个人。
这表明,访问权是与用户特定的工作关联起来的。
定义7-8 角色是工作职能的集合。每个角色r被授予执行一个或多个事务(满足工作需要的操作)的权限。角色r被授予操作权限的集合记为trans(r)。
定义7-9 actr(s),主体s的活跃角色(active role)是s当前正在扮演的角色。
定义7-10 authr(s),主体s的被授权的角色,是s有权限扮演的角色的集合。
定义7-11 当且仅当主体s在当前时间能够执行事务t时,谓词canexec(s,t)为真。
以上三个规则反映了主体s执行事务的能力。
公理7-7 令S是主体的集合,T是事务的集合,那么角色分配的规则是:
即对于任意的s属于S,t属于T,在当前时间主体s能够执行事务t可推出主体s的活跃角色(active role)不为空。
这条公理简单来说,如果一个主体可以执行任何一个事务,那么这个主体就有一个活跃角色(active role)。这是结合角色的事务执行的概念来说的,不是关于用户的。
公理7-8 令S是主体的集合,那么角色授权的规则是:
即对于任意的s属于S,主体s的活跃角色集是主体s被授权的角色集的子集。
这条公理是说,主体若当前要扮演一个角色,则该角色必须是主体有权限扮演的角色。主体不能扮演未经授权的角色。如果没有这个公理,任何主体都可以承担任何角色,并因此可以执行任何事务。
公理7-9 令S是主体的集合,T是事务的集合。则事务分配的规则是:
即,对于任意的s属于S,t属于T,主体s当前执行的事务t属于主体s的活跃角色的可执行操作的集合。
这条规则是说,如果一个事务所属的角色未被授权,那么主体就不能执行该事务。
这些公理限制了可执行的事务。他们不确保被授权的事务都可以被执行。这表明,基于角色的访问控制(RBAC)是强制访问控制的一种形式。在一个事务执行之前,该事务必须满足这些公理的规则。自助访问控制机制可以进一步限制事务的执行。
示例:一些角色还包含着其他角色。比如,一个教练可以执行学员的所有操作,还有其他学员不可以执行的操作。我们可以认为这是包容关系。这表明了角色的层次结构,在这个例子中,教练角色包含了学员角色。另外的一些例子:许多操作是大量角色所共有的。给一个角色指定操作权限也包括给其他角色指定操作权限,而不是对于每个角色都指定一次操作权限。即对一个角色R授予访问权限意味着所有包含了角色R的角色均被授予了此访问权限。这简化了RBAC模型的使用(以及简化了RBAC模型的执行)。
如果角色r1包含角色r2,我们记作r1>r2。则角色的包含关系可以表示为:
[我觉得这个部分原书中应该写错了吧。。。因为s可以扮演r1,且r2包含r1,即r2的操作范围比r1大,则s可以扮演r2,显然不符合常理]
示例:RABC可以模拟责任分离原则。我们的目的是集中指定责任分离原则(?);那么该原则就可以通过前面讨论的角色包容关系加到角色上,关键是要认识到拥有一些角色的用户无法拥有其他角色。即,对于两个遵循责任分离原则的角色r1和r2(同一个主体不能承担着两种角色):
即,对于任意得主体s属于S,若s可以扮演角色r1,则s便不可以扮演角色r2。
需要一个新的谓词来描述互斥的概念。
定义7-12 假设r是一个角色,s是一个主体且,谓词meauthr(r)(用于互斥授权)是s由于责任分离原则的需要所不能承担的角色的集合。
将此定义与上面的例子结合起来,责任分离原则可以概括为:
也就是说,如果r2是与r1互斥的一个角色,那么若s可以扮演r1,则s就不能扮演r2。