自定义RBAC(1)

时间:2022-12-04 21:58:13

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~


在对Spring Security稍做了解之后,可以知道,Spring Security其实只是一个实现认证授权的框架,封装了很多实现细节。但也有一些不方便的地方,比如:

1、自定义一些拦截器时,会导致过滤器重复执行,这属于是框架本身的bug;

2、为了验证简单的权限,加入了很多不需要的东西。这也是使用别人的框架不得不承受的;

3、新版本可能会有一些bug,旧版本可能满足不了需求,尴尬。

之前也提到过ACL、RBAC、PBAC等名词,但它们都是干嘛的?资料有很多,却没有专门的内容来说清楚。尤其是在具体开发工作中,该使用哪种权限模型实现需求?

接下来就掰扯掰扯。

什么是权限?权限就是对资源的访问许可,就像这样:

自定义RBAC(1)


那什么又是认证与授权呢?分开来说:

1、认证:你是谁(身份)

2、授权:能干啥(行为,也可以包括不能干啥)

自定义RBAC(1)


而且现在互联网应用不再像过去的信息化管理系统那样死板,而是需要根据用户的喜好来呈现不同的内容,某种程度上,这其实也是一种权限,千人千面的权限系统:

自定义RBAC(1)


除了用户看到的不同,就连传统上应该由内部运营人员承担的职责,现在也分裂一部分出去,给外部的「合约职员」:

自定义RBAC(1)


而且,在很多小公司里面,开发工程师很多时候都在承担系统管理员的角色:

自定义RBAC(1)


所以,从互联网角色来说,其实现在没人说得清权限到底应该是什么。

但是,架构师和专家们觉得不说清楚又不行,所以就有了下面一些所谓的「常见权限模型」。

一、DAC:Discretionary Access Control,自主访问控制。

DAC系统会识别用户,然后根据被操作对象(Subject)的权限控制列表ACL(或者权限控制矩阵ACM)的信息来决定用户的是否能对其进行哪些操作,例如读取或修改。而拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为“自主(Discretionary)”控制。这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS。

自定义RBAC(1)


有些机构觉得,这么做太随意的,不够安全,所以提出了另一些想法:MAC。


二、MAC:Mandatory Access Control,强制访问控制

每个对象都有一些权限标识,每个用户同样也会有一些权限标识。用户能否对该对象进行操作取决于双方权限标识的关系,这个限制判断通常是由系统硬性规定的。例如谍战片里面的特工查阅资料时,有时会出现因为权限等级不够而无法查阅的情形。

自定义RBAC(1)


MAC非常适合秘密机构或者其他等级观念非常强烈的行业,但对于商业服务系统,则不够灵活。所以商人们和技术专家就想出了中和的办法:PBAC。


三、PBAC:Policy-Based Access Control,基于策略的访问控制

它是一种介于DAC与MAC之间的权限模型,系统会预先定义一些操作,可以由系统管理员来决定哪些用户能执行这些操作。这既不同于用户授权给其他人,又不同于强制指定权限给用户。现在基本上已经被淘汰,只存在于一些老旧系统之中,例如Windows的安全策略:

自定义RBAC(1)


既然PBAC不行,那专家们再想想办法吧,不行就拿一个祭天。于是,有了RBAC。也就是迄今为止最为普及的权限设计模型,没有之一。

所以,从DAC、MAC、PBAC到RBAC,这几种权限系统一直都是共存的,没有说哪种特别厉害,哪种特别没用:把驴牵到磨盘上也能磨出好面粉。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~