花几分钟快速了解几种常见的权限模型(ACL,RBAC,ABAC)

一:前言

权限管理 几乎应用于任何具有用户体系的系统,它旨在管理主体 对对象 的操作 ,由于其普遍性 与其存在的重要性 ,大佬们已经研究总结了很多成熟权限模型,本文意在通过对这些权限模型的分析,能够让大家对权限管理设计有个整体的认知。

二: 巨人的肩膀

ACL(访问控制列表)

用户能不能访问某个资源,通过配置一个用户能否访问控制的列表来判断,如下图所示:

适合于功能单一、权限功能明确或特性化非常明显的系统,现在常用于网络安全,用于控制网络流量和访问权限。

RBAC(基于角色的访问控制)

通过ACL我们需要给每一份主体都配置一份访问控制列表,那么有没有办法给某类具备相同权限的主体只用配一次权限集合呢?基于角色的访问控制的解决方案就是通过提前预置角色,角色绑定权限集合,后面再有同等权限的主体只需要关联该角色即可。(这个模型好像更大的分布在目前我们使用的系统中,可见它是非常好理解,也是非常适用于我们的系统里面的,适用于集中式管理的系统),也用一个图简单表示:

ABAC(基于属性的访问控制,被称为下一代权限模型)

上面两种权限模型都是静态的,绑定的权限如果发生变化必须去静态调整(当然也有哥们会犟,就是说RBAC也可以实现,因为通过程序监听可以动态改权限,这种方案当然可以,但是维护成本巨高,而且需要找到所有的符合条件的权限集合,容易漏和出错),而ABAC模型的出现意在实现动态的访问控制,它并不直接与角色/权限绑定,而是动态计算如下图所示:

属性是主体、对象或环境条件的特征。属性包含name-value对提供的信息。

主体是用户或NPE,例如发出访问请求以对对象执行操作的设备。主体被分配了一个或多个属性。在本文档中,假设主体和用户是同义词。

对象是由ABAC系统管理访问权限的系统资源,例如设备、文件、记录、表、进程、程序、网络或包含或接收信息的域。它可以是资源或请求的实体,也可以是主体可以在其上执行操作的任何东西,包括数据、应用、服务、设备和网络。

操作是主体对对象的请求执行函数。操作包括读取、写入、编辑、删除、复制、执行和修改。

策略是规则或关系的表示,在给定主体、对象和可能的环境条件的属性值的情况下,可以确定是否应允许请求的访问。

环境条件:发生访问请求的操作或情景环境。环境条件是可检测的环境特征。环境特征独立于主体或对象,可能包括当前时间、星期几、用户位置或当前威胁级别。

其中"访问控制计算"接收主体的访问请求,然后根据特定策略检查主体和对象的属性。然后"访问控制计算"确定对象可以对对象执行什么操作。

最后

本文通过极简单的描述,加上笔者可能表达能力也有限,所以把一些参考资料也附上,帮助大家理解:

ABAC

RBAC

史上最强的权限系统设计攻略(上)、基础概念、RBAC以及ABAC模型

史上最强的权限系统设计攻略(下)、ABAC在复杂场景下的实现思路

相关推荐
深蓝AI2 小时前
JWT 不是登录方案:三种登录态架构怎么选
后端
starzy19902 小时前
深入理解Scala Map:从实现原理到工程实践
开发语言·后端·scala
卷无止境3 小时前
凌晨三点的绿灯
后端
excel3 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
风若飞5 小时前
Spring Ai 入门遇到问题1
java·后端·spring
AI入职记6 小时前
Spring AI 结构化输出:结构 100% 通过,严格准确率只有 57%
后端·ai编程
aZhe的全栈知识分享6 小时前
AI 还原 Figma 效果总达不到预期?先别急着让它写代码
前端·后端·面试
码事漫谈6 小时前
WorkBuddy 一直更新卡死?两个毛病,一套处理办法
后端
函数小陈6 小时前
阿里云部署DSH与RAM完成运维
前端·后端
aurora_zjj6 小时前
一次持续 3 年的 OpenResty 死循环排查:最终定位到 LuaJIT ARM64 的一条汇编指令
后端