论文阅读: Role-Based Access Control Models, 1996

摘要

论文描述的方法简称 RBAC,基于角色的访问控制,是目前非常主流的访问控制方法。用户(User)、角色(Role)和权限(Permission)是论文中最主要的三个概念。角色和用户组这个概念很像,但是用户组仅仅只是一个用户集合,而角色则联系着用户和权限。说到底都是为了让用户获取权限来执行相应的操作,不管是加入角色还是用户组,都只是一个中间态。

RBAC0 是基础模型,是任何系统实现 RBAC 的最低要求。RBAC1 和 RBAC2 都包含了 RBAC0,但是分别加入了不同的特性。RBAC1 加入了角色层级特性,即角色 A 可以通过继承角色 B 获取角色 B 拥有的权限。RBAC2 加入了约束特性,控制用户对 RBAC 中不同资源、组件的权限。而 RBAC3 包括了角色层级和约束。示意图如下所示,其中基础模型 RBAC0 是实线部分。

文章并没有给出模型具体的实现方案,这些模型主要用作产品开发的指导准则或设计原型。

RBAC 模型族

RBAC0

基础模型主要由用户 U,角色 R 和权限 P 三个实体集组成,图表中也表示出了会话 S。用户代表使用系统的每一个“人”;角色代表负责一系列职责的人群,用职业或者岗位来理解;会话是将从用户到多个角色的映射。权限需要详细说明。

权限是访问一个或多个数据对象或其他资源的许可证,权限通常是正向的,即拥有权限后可以访问对应的对象。但是有的模型把权限设计成为负向的,即获得这个权限后将无法访问对象。RBAC 模型中将负向权限建模成为“约束”,后文会提及。权限的含义完全取决于系统的类别和系统的实现细节。操作系统中区分了文件、目录、设备和端口等对象的读、写和执行操作;数据库对关系、元组、属性和视图等对象的查询、更新、删除和插入操作进行了区分。

图 1 还展示了用户分配 UA 和权限分配 PA 关系,它们都是多对多关系。RBAC 的关键就蕴藏在这两个关系当中。RBAC0 中各组成部分为:

  • U, R, P, S,分别代表用户、角色、权限和会话
  • PA,权限分配,权限到角色的多对多关系
  • UA,用户分配,用户到角色的多对多关系
  • _user_, 从一个会话映射到一个用户的函数
  • _roles_,从一个会话映射到一个角色集的函数

RBAC1

RBAC1 在 0 的基础上加入了角色层级,这个特性在现代组织管理当中显得很自然。层级高的角色继承层级低的角色的权限,如 Team Leader 可以访问所有项目的细节而 Project Programmer 只能访问所属项目。

从离散数学的角度来说,角色间的层级是偏序关系,即满足了自反性、传递性和反对称性的关系。

私有权限或私有角色通常用于控制角色继承时的权限作用域,如对进展中的为完成工作访问权限如果从低级角色直接继承到高级角色似乎不是特别合适。如 Team Leader 不应总是收到每一位 Programmer 的 CI Build 失败通知。

RBAC2

RBAC2 在 0 的基础上加入了约束特性,这个特性有时被称作 RBAC 的灵魂。
约束是是一个强力的机制,可以用来打造更高水准的组织管理架构。下面是文章介绍到的一些常见约束:

  • 互斥约束,互斥顾名思义就是用户只能获得其中一个角色身份,或者同样的权限只能赋予其中一个角色;
  • 基数约束,一个角色最多只能拥有一定数量的成员;
  • 先需角色约束,给用户分配角色 A 之前需要该用户拥有角色 B 的身份;
  • 角色层级约束,没错就是 RBAC1 中的角色层级,它也可以被看作是一类约束。

RBAC3

RBAC3 就是把 1 和 2 组合起来,既有角色层级又有约束条件。

基于 RBAC 的管理模型

上面提到 RBAC 模型当中所有组成部分都是由一个安全管理员直接负责,这样的情况只有在极小的系统中才有可能存在。任何稍大一些的系统都有多个安全管理员。由于 RBAC 的主要好处就是实现了权限的管理,那么如何让 RBAC 来管理 RBAC 本身呢?论文提出的管理模型在图 4 中展示,其上半部分就是之前的图 1(b)部分,其下半部分是上半部的镜像,其中包含了管理角色 AR 和管理权限 AP。权限只能授予给角色,管理权限只能授予给管理角色。

RBAC 模型中的管理权限可以视作修改用户分配 UA,权限分配 PA 和用户层级 RH 关系的能力。这样就可以实现用 RBAC 模型管理自己了。

参考文献

[1] Sandhu R S, Coyne E J, Feinstein H L, et al. Role-based access control models[J]. Computer, 1996, 29(2): 38-47.

论文阅读: Role-Based Access Control Models, 1996

https://powerfooi.github.io/2020/05/18/ReadRBAC/

作者

PowerfooI

发布于

2020-05-18

更新于

2024-08-04

许可协议

评论