RBAC - 基于角色的权限控制模型
在 B 端产品设计中,权限控制体系设计是十分重要的一个环节,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称 RBAC)。
希望通过本篇博客的学习,您能够深入了解 RBAC 模型的核心思想和实现原理,掌握如何在实际项目中应用 RBAC 模型来提高系统的安全性和可维护性。
常见的权限控制模型
在深入讨论 RBAC 模型之前,我们先来看一下常见的权限控制模型有哪些。
权限控制最常见的模型共 4 个:
- DAC(Discretionary Access Control)自主访问控制
系统会识别用户,然后根据被操作对象(Subject)的权限控制列表或者权限控制矩阵的信息来决定用户是否能对其进行哪些操作,例如读取或修改。而拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为“自主(Discretionary)”控制。这种设计最常见的应用就是文件系统的权限设计。
- MAC(Mandatory Access Control)强制访问控制模型
在 MAC 的设计中,每一个对象都有一些权限标识,每个用户同样也会有一些权限标识,而用户能否对该对象进行操作取决于双方权限标识的关系,这个关系的判断通常是由系统硬性限制的。MAC 非常适合机密机构或者其他等级观念强烈的行业,但对于类似商业服务系统,则因为不够灵活而不能适用。
- RBAC(Role-Based Access Control)基于角色的访问控制模型
最常用的系统权限控制就是 RBAC 模型,能覆盖绝大部分的场景。也是本篇详细介绍的模型和实际应用中的一些场景。
- ABAC(Attribute-Based Access Control)基于属性的访问控制模型
在 ABAC 中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的。可以细粒度地授权在何种情况下对某个资源具备某个特定的权限。比如时间、位置、设备、加密强度等在 RBAC 中不使用的一些属性信息。比如:早上九点前禁止 A 部门的人访问 B 系统。
但是 ABAC 使用过于复杂,一般场景就是 RBAC 模型,本篇也着重介绍 RBAC 模型。
什么是 RBAC
RBAC 模型概述
Role-Based Access Control,中文意思是:基于角色(Role)的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。
简单来说,就是通过将权限分配给角色,再将角色分配给用户,来实现对系统资源的访问控制。一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。
具体而言,RBAC 模型定义了以下几个核心概念:
- 角色(Role):角色是指在系统中具有一组相关权限的抽象概念,代表了用户在特定上下文中的身份或职能,例如管理员、普通用户等。
- 权限(Permission):权限是指对系统资源进行操作的许可,如读取、写入、修改等。权限可以被分配给角色。
- 用户(User):用户是指系统的实际使用者,每个用户可以被分配一个或多个角色。
- 分配(Assignment):分配是指将角色与用户关联起来,以赋予用户相应的权限。
它们之间的关系如下图所示:
RBAC 认为权限授权的过程可以抽象地概括为:Who 是否可以对 What 进行 How 的访问操作,并对这个逻辑表达式进行判断是否为 True 的求解过程,也即是将权限问题转换为 What、How 的问题,Who、What、How 构成了访问权限三元组。
- Who:是权限的拥有者或主体(如:User,Role)。
- What:是操作或对象(operation,object)。
- How:具体的权限(Privilege,正向授权与负向授权)。
通过 RBAC 模型,可以实现灵活且易于管理的访问控制策略。管理员可以通过分配和调整角色,来管理用户的权限。这种角色层次结构可以帮助简化权限管理,并确保用户只有所需的权限。
RBAC 模型广泛应用于系统安全、数据库管理、网络管理等领域,它提供了一种可扩展、可管理的访问控制机制,有助于保护系统资源免受未经授权的访问和潜在的安全威胁。
RBAC 支持的安全原则
RBAC 支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则。
-
最小权限原则:RBAC 可以将角色配置成其完成任务所需的最小权限集合。
-
责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作。
-
数据抽象原则:可以通过权限的抽象来体现,例如财务操作用借款、存款等抽象权限,而不是使用典型的读、写、执行权限。
RBAC 的优缺点
RBAC 模型有其优点和缺点,下面是对其进行的概述:
优点:
- 简化权限管理: RBAC 模型通过角色来管理权限,使得权限分配更加集中化和规范化。管理员只需管理角色与权限的对应关系,而不需要为每个用户单独分配权限,从而简化了权限管理过程。
- 提高安全性: RBAC 模型可以帮助降低系统的安全风险。通过严格控制角色与权限的对应关系,可以减少错误授权和滥用权限的可能性,提高系统的安全性。
- 易于维护和扩展: RBAC 模型的权限管理是基于角色的,使得系统更容易进行维护和扩展。当用户的角色发生变化时,只需要调整其角色,而不需要修改其权限设置。同时,当系统需要新增角色或调整权限时,也更加方便。
- 符合组织结构: RBAC 模型能够较好地与组织的层级结构和业务流程相匹配。通过定义不同的角色和其对应的权限,可以很好地反映出组织内部的职责分工和权限层级。
缺点:
- 角色爆炸: 在复杂的系统中,可能会出现角色数量爆炸的情况。当系统需要支持大量的角色和权限组合时,RBAC 模型可能会变得复杂,难以管理。
- 灵活性不足: RBAC 模型缺乏灵活性,难以处理个别用户需要特定权限的情况。在某些情况下,可能需要为特定用户单独分配权限,而 RBAC 模型并不支持这种灵活性。
- 复杂性增加: 在大型系统中,RBAC 模型可能会增加系统的复杂性。由于需要管理大量的角色和权限,以及角色之间的关系,可能会增加系统的开发和维护成本。
RBAC 的三种模型
1. 标准 RBAC(RBAC0)
RBAC0,是最简单、最原始的实现方式,也是其他 RBAC 模型的基础。
RBAC0 包含最基本的三个元素:用户(User)、角色(Role)和权限(Permission)。在这个模型中,用户被分配到一个或多个角色,并且角色被赋予一系列的权限。用户通过角色间接拥有这些权限。
2. RBAC1
RBAC1 基于 RBAC0 模型,引入了角色间的继承关系,即角色上有了上下级的区别。
3. RBAC2
RBAC2 基于 RBAC0 模型的基础上,进行了角色的访问控制。
RBAC2 中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。
比如在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。
4. RBAC3
最全面的权限管理,它是基于 RBAC0,将 RBAC1 和 RBAC2 进行了整合。
如何设计 RBAC
接下来介绍基于 RBAC 模型的权限系统的功能模块组成、流程以及数据库的设计。