权限控制-RBAC模型

前言

在计算机和信息系统的发展过程中,安全问题一直是关注的焦点。传统的访问控制模型主要基于用户身份、资源和操作等方面进行控制,但这种模型存在一些严重的缺陷,如难以适应复杂的应用环境、权限管理不够灵活、难以实现分级授权等问题。

为了解决这些问题,RBAC模型开始被引入。

RBAC是什么

RBAC(Role-Based Access Control)模型是一种常用的权限控制模型,用于管理和控制用户对系统资源的访问权限。在 RBAC 模型中,访问权限是通过角色而不是直接与用户关联来进行管理的。

RBAC组成

  • 用户(User):用户代表系统中的实体,可以是个人用户或其他应用程序。用户通过被分配角色来获得相应的权限,从而决定其在系统中能够执行的操作。
  • 角色(Role):角色代表了一组相关权限的集合,通常与用户的职能、责任或角色相对应。每个角色拥有特定的权限,定义了该角色所能执行的操作。
  • 权限(Permission):权限是指用户对系统资源的访问能力。它可以是操作级别的,如读取、写入、删除等,也可以是对象级别的,如访问特定文件或数据库。

关系如下图:

角色和用户、角色和权限大多设计为多对多关系。

RBAC工作原理

把权限赋予角色,再把角色赋予用户,用户就拥有了角色所对应的权限。用户拥有的权限等于他所有的角色持有权限之和。

RBAC1

上边是基本的 RBAC0 模型,包括了 RBAC 最核心的概念和机制。RBAC0 模型主要解决了访问控制模型的简单性和灵活性问题,将访问权限的管理从用户直接解耦出来,实现了相对较好的权限管理和安全性。

RBAC1 在 RBAC0 的基础上,进行了 角色分层。通过给角色划分等级,每个等级拥有不同的权限,从而实现了更细粒度的权限管理。这种角色的分层让权限的分配更加灵活,可以根据具体需求来调整角色等级和相应的权限。

角色分层如下图所示:

角色分层,同一个角色可以有不同等级,不同等级又对应着不同的权限。

子角色可以对父角色的权限进行继承,但是子角色的权限一定小于父角色。

RBAC2

RBAC2 在 RBAC0 的基础上增加了 RBAC 的 约束模型。具体来说,这些限制可以分成两类,即静态职责分离(SSD)和动态职责分离(DSD)。通过这些约束模型,RBAC2 能够更好地保证权限的安全性和稳定性。

静态职责分离(SSD) 主要是对用户、角色和权限三者之间增加了一些限制,例如互斥角色和基数约束。在 SSD 中,一些特定的角色不能被分配给同一个用户。例如,同一用户不能被分配 "管理员" 和 "普通用户" 这两个互斥角色。另外,对于用户拥有的角色数量也有限制,即一个用户拥有的角色是有限的。在一些场景中,例如公司或组织的实际运营中,不同的职位或角色之间具有一定的排他性,不能同时由同一人担任。通过 SSD,我们可以保证这种排他性得以实现。

动态职责分离(DSD) 主要是在会话和角色之间增加限制。具体来说,DSD 可以动态地约束用户拥有的角色。例如,一个用户可以有多个角色,但是在一次会话中只能激活一个角色。这种动态的约束可以防止用户在会话中同时激活多个角色,从而保证系统的安全性。

RBAC2 用户、角色和权限的关系如下图所示:

RBAC3

RBAC3 是 RBAC2 和RBAC1的合集,所以它 既包含了角色分层,也包括了可以增加的各种约束。因此,RBAC3是这四种模型中最为全面和复杂的权限管理模型。可以实现更为精细和安全的权限管理。

总结

RBAC 适用于需要对用户进行细粒度访问控制的场景,比如企业内部系统。权限控制最难的部分在于业务上的设计,根据需求设计一个适应本企业的 RBAC 才是真正的难点。

相关推荐
桂花很香,旭很美4 小时前
智能体技术架构:从分类、选型到落地
人工智能·架构
有来技术7 小时前
Spring Boot 4 + Vue3 企业级多租户 SaaS:从共享 Schema 架构到商业化套餐设计
java·vue.js·spring boot·后端
东东5168 小时前
学院个人信息管理系统 (springboot+vue)
vue.js·spring boot·后端·个人开发·毕设
三水不滴9 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
sxgzzn9 小时前
能源行业智能监测产品与技术架构解析
架构·数字孪生·无人机巡检
xiaoxue..9 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
快乐非自愿9 小时前
【面试题】MySQL 的索引类型有哪些?
数据库·mysql·面试
小邓吖10 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
南风知我意95710 小时前
【前端面试2】基础面试(杂项)
前端·面试·职场和发展
大爱编程♡10 小时前
SpringBoot统一功能处理
java·spring boot·后端