系统设计---RBAC模型与ABAC模型
RBAC 模型了解吗?
系统权限控制最常采用的访问控制模型就是 RBAC 模型 。
什么是 RBAC 呢? RBAC 即基于角色的权限访问控制(Role-Based Access Control)。这是一种通过角色关联权限,角色同时又关联用户的授权的方式。
简单地说:一个用户可以拥有若干角色,每一个角色又可以被分配若干权限,这样就构造成“用户-角色-权限” 的授权模型。在这种模型中,用户与角色、角色与权限之间构成了多对多的关系。
在 RBAC 权限模型中,权限与角色相关联,用户通过成为包含特定角色的成员而得到这些角色的权限,这就极大地简化了权限的管理。
为了实现 RBAC 权限模型,数据库表的常见设计如下(一共 5 张表,2 张用户建立表之间的联系):
通常来说,如果系统对于权限控制要求比较严格的话,一般都会选择使用 RBAC 模型来做权限控制。
优点:
- 简化权限管理:RBAC模型将权限分配和管理集中在角色层级,简化了权限管理过程。
- 减少权限冗余:通过角色的权限集合,可以减少权限冗余和提高权限管理的效率。
- 提高安全性:RBAC模型可以限制用户只能访问其所需的资源,降低系统被恶意访问的风险。
- 易于扩展:RBAC模型具有良好的扩展性,可以根据系统需求灵活地添加、修改和删除角色和权限。
缺点:
- 复杂性:RBAC模型的实施可能会涉及到复杂的角色和权限管理,需要仔细设计和规划。
- 角色爆炸:当系统中角色数量庞大时,可能会出现角色爆炸的问题,增加了管理的复杂性。
- 刚性:RBAC模型的权限控制是基于角色的,可能无法灵活地处理一些特殊权限需求。
ABAC 模型了解吗?
基于属性的访问控制(Attribute-Based Access Control,简称 ABAC) 是一种比 RBAC模型
更加灵活的授权模型,它的原理是通过各种属性来动态判断一个操作是否可以被允许。这个模型在云系统中使用的比较多,比如 AWS,阿里云等。
考虑下面这些场景的权限控制:
- 授权某个人具体某本书的编辑权限
- 当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档
- 当用户是一个文档的拥有者并且文档的状态是草稿,用户可以编辑这个文档
- 早上九点前禁止 A 部门的人访问 B 系统
- 在除了上海以外的地方禁止以管理员身份访问 A 系统
- 用户对 2022-06-07 之前创建的订单有操作权限
可以发现上述的场景通过 RBAC模型
很难去实现,因为 RBAC模型
仅仅描述了用户可以做什么操作,但是操作的条件,以及操作的数据,RBAC模型
本身是没有这些限制的。但这恰恰是 ABAC模型
的长处,ABAC模型
的思想是基于用户、访问的数据的属性、以及各种环境因素去动态计算用户是否有权限进行操作。
优点:
- 灵活性:ABAC模型具有很高的灵活性,可以根据用户的属性动态调整权限,适应不同的访问控制需求。
- 精细控制:ABAC模型可以实现更细粒度的权限控制,可以根据多个属性组合来决定用户是否有权限访问资源。
- 策略管理:ABAC模型通过定义属性和策略来管理访问控制,使得权限管理更加直观和灵活。
- 适应复杂环境:ABAC模型适用于复杂的环境和需要细致控制权限的场景,如云计算、物联网等。
缺点:
- 复杂性:ABAC模型的实施可能会涉及到复杂的属性定义、策略管理和权限控制,需要一定的技术和资源支持。
- 性能开销:由于需要对多个属性进行评估和决策,ABAC模型可能会带来一定的性能开销,特别是在大规模系统中。
- 难以管理:ABAC模型的灵活性也可能导致权限管理的复杂性增加,需要仔细规划和管理属性和策略。
ABAC 模型的原理
在 ABAC模型
中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的。
- 对象:对象是当前请求访问资源的用户。用户的属性包括 ID,个人资源,角色,部门和组织成员身份等
- 资源:资源是当前用户要访问的资产或对象,例如文件,数据,服务器,甚至 API
- 操作:操作是用户试图对资源进行的操作。常见的操作包括“读取”,“写入”,“编辑”,“复制”和“删除”
- 环境:环境是每个访问请求的上下文。环境属性包含访问的时间和位置,对象的设备,通信协议和加密强度等
在 ABAC模型
的决策语句的执行过程中,决策引擎会根据定义好的决策语句,结合对象、资源、操作、环境等因素动态计算出决策结果。每当发生访问请求时,ABAC模型
决策系统都会分析属性值是否与已建立的策略匹配。如果有匹配的策略,访问请求就会被通过。