首页 > 其他分享 >自定义RBAC(1)

自定义RBAC(1)

时间:2022-12-04 21:45:22浏览次数:46  
标签:PBAC 自定义 DAC 用户 RBAC MAC 权限

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

 

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

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

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

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

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

接下来就掰扯掰扯。

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

 

 

 

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

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

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

 

 

 

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

 

 

 

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

 

 

 

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

 

 

 

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

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

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

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

 

 

 

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

 

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

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

 

 

 

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

 

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

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

 

 

 

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

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

 

 


 

 

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

 

标签:PBAC,自定义,DAC,用户,RBAC,MAC,权限
From: https://www.cnblogs.com/xiangwang1111/p/16950889.html

相关文章

  • 【C语言】自定义一个模仿strlen()函数功能的函数
    自定义一个模仿strlen()函数功能的函数//my_strlen()函数声明,返回字符数组中字符的个数//参数为字符数组的地址intmy_strlen(char*str);intmain(void){ charch[......
  • Springboot之additional-spring-configuration-metadata.json自定义提示
    【3】@ConfigurationProperties注入属性https://blog.csdn.net/qq_25614773/article/details/124788923 https://docs.spring.io/spring-boot/docs/2.4.7/reference/ht......
  • 15.【C语言进阶】自定义类型
    结构体的声明常规的结构的声明太过简单常见,不再过多阐述。特殊声明在声明结构体的时候可以不完全的声明struct{ inti; doubled; charc;}x;struct{ inti;......
  • el-upload 自定义上传图片(修改文件名,统一上传)
    当前遇到的需求是:从本地选取图片之后,要支持用户自己修改文件名,再统一上传oss第一步:覆盖默认上传行为 代码为:第二步:在图片未上传之前得到图片的“伪协议地址”,循环展......
  • WPF 读写自定义配置文件
    程序集如下usingSystem.Windows;namespaceWpfApp1{///<summary>///MainWindow.xaml的交互逻辑///</summary>publicpartialclassMainW......
  • 【web】自定义协议Protocol URL
    URLProtocol(自定义协议)可以让web页面调用本地exe程序,这个神奇的功能是怎么实现的呢?URLProtocolURLProtocol,没错就是标题里所说的自定义协议。这玩意儿大家最常见的比如......
  • zabbix监控项中的自定义时间
    在zabbix监控项里面可以设置自定义时间,格式如下zabbix自定义时间间隔wd1-7h5-22m/5周一到周日,每天5点到22点,每隔5分钟执行一次h9,10m10-40/30每天9点......
  • Java8中Collectors求和功能的自定义扩展
    业务中需要将一组数据分类后收集总和,原本可以使用Collectors.summingInt(),但是我们的数据源是BigDecimal类型的,而Java8原生只提供了summingInt、summingLong、summingDouble......
  • arco design vue 表单自定义验证
    不知道为啥,官方文档里竟然没写...直接上代码template里<a-form-itemfield="repeatPassword":rules="[{validator:validateRepeatPassword,trigger:'change'}]"......
  • Dockerfile自定义镜像
    常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。而要自定义镜像,就必须先了解镜像的结构才行。1.镜像结构镜像是将应用程序及其需要的系统函......