0.简介
在数字化时代,权限控制是保障数据安全和防止越权操作的核心机制。为帮助读者系统理解权限控制的核心模型,本文将介绍八种常见的权限控制模型的基本原理、适用场景以及优缺点的对比。
1.ACL(访问控制列表)
ACL(Access Control List)的原理比较简单容易理解,就是对于每一个客体(需要被访问控制所保护的资源)都有一个列表,记录各个实体(要访问资源的用户/进程)对于自己的访问权限(读/写/执行等)。
我们可以通过一个例子来看,比如A要编辑一个文件,此时会检验文件的控制列表有没有A这个用户,没有就不能编辑。
基于其原理,它的优缺点就比较明确了:
1)优点:实现简单,灵活性高,可以精准地控制单个资源。
2)缺点:每个客体需要配置自己的列表,增加了管理的复杂度。
其适用场景主要是用于小型的系统中。
2.DAC(自主访问控制)
DAC(Discretionary Access Control)从名字不难看出其带有自主的特性。实际上,DAC就是对于ACL的一种扩展,其在ACL的基础上允许主体将自己的权限分配给其他主体。
我们也可以通过一个例子来看,比如A文件的所有者,其可以为其他用户分配权限或者变更所有者。
其优缺点如下:
1)优点:管理更为灵活,适合于动态协作的场景。
2)缺点:容易因为主体的误操作导致权限的泄漏。
其主要适用的场景为计算机文件系统(windows的,linux的)以及协同办公类软件。
3.MAC(强制访问控制)
MAC(Mandatory Access Control)和DAC强调的自主相对立,其强调强制性规则和不可修改,这些规则由管理员预定,其通常是主体有权限标识,而客体也有权限标识,能否访问取决于双方的标识关系。
比如有主体三个等级A>B>C,而文件也有三个等级D>E >F,C只能访问F,访问时会验证双方等级,允许才能访问。
其优缺点如下:
1)优点:安全性极高,能很好的防止内部恶意攻击。
2)缺点:缺乏灵活性且实现工作量大。
常用场景为像军事系统,机密文件管理这种安全要求严格的系统。
4.RBAC(基于角色的访问控制)
RBAC(Role-Based Access Control) 是在上面三种经典访问模型的主体-客体-权限的基础上又增加了角色的概念,每个用户可以被分到一个或多个角色,而每个角色又对应不同的权限,我们可以看下图的例子:
RBAC在实际应用中进一步细化分为以下四种,一般都是使用RBAC0:
1)RBAC0:用户和角色,权限为多对多关系,就是我们上面介绍的RBAC。
2)RBAC1:相较于RBAC0增加了层级结构,角色权限可以进行继承。
3)RBAC2:RBAC2基于RBAC0增加了校验,比如不能同时拥有两个权限。
4)RBAC3:RBAC3简单来说就是对RBAC1和RBAC2的结合。
其优缺点如下:
1)优点:简化了权限管理,授权灵活,符合实际场景。
2)缺点:增加了角色,在其数量较多时维护困难。
其一般用于企业架构明确的场景,比如企业ERP系统,OA办公平台,大型电商后台等。
5.TBAC(基于任务的访问控制)
TBAC(Task-Based Access Control)是一种动态的权限管理模型,其不再以主体或者角色为中心,而是以任务为中心,将权限和用户执行的任务绑定,其一般由主体,客体,许可,生命周期,授权步五个部分组成。
比如审批流程,只有在处理某笔订单时才会获得权限,任务完成后自动回收。
其优缺点如下:
1)优点:符合最小权限原则,可以动态的进行权限调整。
2)缺点:需要精准的定义任务阶段,实现更为复杂。
其适用场景一般为行政审批或者供应链管理系统等。
6.ABAC(基于属性的访问控制)
ABAC(Attribute-Based Access Control)是通过动态计算属性是否满足条件来进行权限判断的模型,其中一个操作是否可以进行,需要通过主体,客体,操作和环境共同计算判断。
比如一个用户想阅读某个文档,其需要根据用户属性,文档属性,执行的操作(也就是读操作)和其他环境因素(如计算机ip等)来判断是否可以进行阅读。
其优缺点如下:
1)优点:灵活度高,支持复杂的场景。
2)缺点:管理难度大,理解稍困难。
主要的应用场景有云计算平台,如AWS。
7.PBAC(基于策略的访问控制)
PBAC(Policy-Based Access Control )其主要思想是通过集中的策略规则取动态决定用户对资源的访问权限;通过将访问控制逻辑和实际执行逻辑进行解耦,通过配置的方式实现权限管理。其简单来说就是定义了谁在什么场景下可以对什么资源执行什么操作。
一个简单的例子就是管理员可以设置财务文件夹允许经理在工作时间可以访问。
其优缺点如下:
1)优点:策略集中管理,适合跨系统统一权限控制。
2)缺点:策略冲突需要人工调试。
适用场景主要是多租户的SaaS平台,跨部门权限管理系统等。
8.OBAC(基于对象的访问控制)
OBAC(Object-Based Access Control)是一种以资源(对象)为核心的访问控制模型。其核心思想是将权限直接绑定到具体的对象(如文件、数据库记录、API等),而非用户或角色。其是一种思想,具体的实现可以是ACL。