zoukankan      html  css  js  c++  java
  • 权限设计模式

    权限设计模式


    自主权限访问控制DAC

    DAC的概念

    DAC: Discretionry Access Control

    DAC权限模式下系统会自动识别用户,然后根据被操作对象(Subject)的权限控制列表ACL(Access Control List)或者权限控制矩阵(ACM:Access Control Matrix)的信息来决定用户的是否对其有相应的权限,例如:read or modify;

    而拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为"自主(Discretionry)"控制;

    DAC的应用场景

    DAC设计最常见的应用就是文件系统的权限设计,例如Microsoft的NTFS文件系统;

    DAC的缺点

    DAC最大的缺点就是对权限控制比较分散,不便于管理,比如:无法简单的将一组文件设置统一的权限开放给指定的用户;

    强制访问控制MAC

    MAC的概念

    MAC:Mandatory Access Control

    MAC是威力弥补DAC权限控制过于分散的问题而诞生的,在MAC的设计中,每一个对象(Subject)都有一些权限标识,每个用户同样也会有一些权限标识,而用户能否对该对象进行操作取决于双方的权限标识关系,这个限制判断通常是由系统硬性限制的.例如:在影视作品中我们经常能看到特工在查询机密文件时,屏幕提示需要“无法访问,需要一级安全许可”,这个例子中,文件上就有“一级安全许可”的权限标识,而用户并不具有。

    MAC的应用场景

    MAC非常适合机密机构或者其他等级观念强烈的行业,但对于类似商业服务系统,则因为不够灵活而不能适用。

    基于角色的访问控制RBAC

    RBAC的概念, RBAC官方文档

    RBAC: Role-Based Access Control

    RBAC的诞生是因为DAC和MAC的诸多限制,并成为迄今为止最为普及的权限设计模型。

    RBAC在用户和权限之间引入了"角色(Role)"的概念,其模型如下图:

    img

    如图所示,每个用户关联一个或多个角色,每个角色关联一个或多个权限,从而可以实现了非常灵活的权限管理。角色可以根据实际业务需求灵活创建,这样就省去了每新增一个用户就要关联一遍所有权限的麻烦;

    简单来说RBAC就是:用户关联角色,角色关联权限。另外,RBAC是可以模拟出DAC和MAC的效果的;

    RBAC规范的扩展模式

    角色继承

    角色继承: Hierarchical Role

    img

    角色继承就是指角色可以继承于其他角色,在拥有其他角色权限的同时,自己还可以关联额外的权限;

    这种设计可以给角色分组和分层,一定程度简化了权限管理工作;

    职责分离

    职责分离: Separation of Duty

    为了避免用户拥有过多权限而产生利益冲突,RBAC提出了职责分离的设计的模式; 例如: 一个篮球运动员同时拥有裁判的权限(看一眼就给你判犯规狠不狠);

    职责划分的两种模式:

    • 静态职责分离(Static Separation of Duty): 用户无法同时被赋予有冲突的角色;
    • 动态职责分离(Dynamic Separation Of Duty): 用户在一次会话(Session)中不能同时激活自身所拥有的、互相冲突的角色,只能选择其中之一;

    img

    用户和对象的权限控制

    从上面对RBAC的描述,都只是在用户和权限之间进行设计,并没有设计到用户和对象之间的权限判断,而在实际业务系统中限制用户能够使用的对象是很常见的需求;例如下面的需求,我们就需要使用用户和对象的权限控制

    华中区域的销售没有权限查询华南区域的客户数据,虽然他们都具有销售的角色,而销售的角色拥有查询客户信息的权限

    go语言中对RBAC的实现

    基于属性的权限验证ABAC

    ABAC的概念

    ABAC: Attri-Based Access Control

    ABAC不同于常见的将用户通过某种方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来判断是否满足某种条件。属性通常来说分为四类:

    • 用户属性: 如用户年龄

    • 环境属性: 如当前时间

    • 操作属性: 如读取

    • 对象属性: 如一篇文章,又称资源属性

    举例:

    允许所有班主任在上课时间自由进出校门”这条规则,其中,“班主任”是用户的角色属性,“上课时间”是环境属性,“进出”是操作属性,而“校门”就是对象属性了

    为了实现便捷的规则设置和规则判断执行,ABAC通常有配置文件(XML、YAML等)或DSL配合规则解析引擎使用。XACML(eXtensible Access Control Markup Language)是ABAC的一个实现,但是该设计过于复杂.

    ABAC的特点

    • 集中化管理
    • 可以按需实现不同颗粒度的权限控制
    • 不需要预定义判断逻辑,减轻了权限系统的维护成本,特别是在需求经常变化的系统中
    • 定义权限时,不能直观看出用户和对象间的关系
    • 规则如果稍微复杂一点,或者设计混乱,会给管理者维护和追查带来麻烦
    • 权限判断需要实时执行,规则过多会导致性能问题

    ABAC有时也被称为PBAC(Policy-Based Access Control)或CBAC(Claims-Based Access Control)

  • 相关阅读:
    出现socket:(10107)系统调用失败
    JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
    获取滚动条距离底部的距离
    linux常用命令使用方法
    Python:一
    【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
    【【C++ Primer 第15章】 虚析构函数
    ubuntu基本用法
    深度优先搜索(DFS)和广度优先搜索(BFS)
    【C++ Primer 第7章】定义抽象数据类型
  • 原文地址:https://www.cnblogs.com/vinsent/p/11151788.html
Copyright © 2011-2022 走看看