权限控制-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 才是真正的难点。

相关推荐
Java4ye1 分钟前
Netty 是如何解析 Redis RESP 协议的——请求篇
后端
杰哥在此5 小时前
Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程
java·开发语言·python·面试·编程
青青草原上的梦想家7 小时前
Cocos Creator 游戏性能优化指南
游戏·面试·性能优化·typescript
刘铸纬7 小时前
Golang中defer和return顺序
开发语言·后端·golang
EthanWsir8 小时前
嵌入式C语言面试相关知识——关键字(不定期更新)
c语言·开发语言·面试
多多*8 小时前
每天一道面试题之浅浅讲一下java5中的自动装箱和自动拆箱
java·开发语言·spring boot·后端·spring
江湖十年8 小时前
Go 语言中的结构体内存对齐你了解吗?
后端·go
飞翔的佩奇8 小时前
Java项目:基于SSM框架实现的德云社票务管理系统【ssm+B/S架构+源码+数据库+开题报告+毕业论文】
java·数据库·spring·架构·maven·ssm框架·票务系统
passion更好9 小时前
IT专业入门,高考假期预习指南
java·前端·人工智能·后端·python·机器学习·高考
谦宇9 小时前
Nest 接入消息队列 RabbitMQ
前端·后端·nestjs