发布于 

数据平台的权限设计

如何为数据平台做权限控制?

一、基础

数据权限管理对于一个数据平台的重要性自不必多说,通常而言,对于一个数据平台,权限体系可以分为如下两类:功能权限数据权限两部分。

  • 功能权限指的是在系统中的功能可否使用,通常我们将功能权限分为查看、编辑、删除等,同时编辑、删除权限又包含了查看。通过小的权限点拆分更精细的赋予了员工能否进入某个页面查看信息、编辑信息的能力。
  • 数据权限指数据中存在的数据是否能查看,是一个更细粒度的权限。比如一个页面,不同角色查看不同的数据就需要通过数据权限控制。在RBAC模型中通过定义资源进行控制,在ABAC模型中通过资源及限定具体策略进行控制

二、常用的权限管控模型

  • ACL(Access Control List):基于用户级别的权限控制。

    将系统的各种权限直接授予具体的用户。抽象来说,为每个用户维护了单独的权限列表,当需要分配权限、收回权限时,需要修改对应用户的权限信息。

  • RBAC(Role Base Access Control):基于角色级别的权限控制。

    与 ACL 对比,RBAC不用给用户单个分配权限,权限与用户之前通过角色关联。通过给不同的角色分配不同的权限,只需要将用户指向对应的角色就会有对应的权限。分配权限、收回权限只需要通过修改用户的角色即可。

    用户:你的终端用户;
    角色:角色是一个逻辑集合,你可以授权一个角色某些操作权限,然后将角色授予给用户,该用户将会继承这个角色中的所有权限;
    资源:你可以把你应用系统中的实体对象定义为资源,比如订单、商品、文档、书籍等等,每种资源都可以定义多个操作,比如文档有阅读、编辑、删除操作;
    操作:操作是用户试图对资源进行的操作。常见的操作包括“读取”,“写入”,“编辑”,“复制”和“删除”;
    授权:把某类(个)资源的某些(个)操作授权给角色或者用户。
    通过用户、角色、资源、操作、授权的组合,就可以轻松直观地实现灵活、细粒度的权限模型。

  • ABAC(Attribute Base Access Control):基于属性级别的权限控制。

    不同于常见的将用户通过某种方式直接关联到权限的方式,ABAC 是通过动态计算一个或一组属性来是否满足某种条件来进行权限判断,你可以细粒度地授权在何种情况下对某个资源具备某个特定的权限。ABAC授权模型理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。从使用场景来说比较适用于用户数量多并且授权比较复杂的场景。简单的场景也是可以使用ABAC的,但是使用基础的ACL或者RBAC也能满足需求。

    在 ABAC 中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的。
    对象:对象是当前请求访问资源的用户。用户的属性包括ID,个人资源,角色,部门和组织成员身份等;
    资源:资源是当前访问用户要访问的资产或对象(例如文件,数据,服务器,甚至API)。资源属性包含文件的创建日期,文件所有者,文件名和类型以及数据敏感性等等;
    操作:操作是用户试图对资源进行的操作。常见的操作包括“读取”,“写入”,“编辑”,“复制”和“删除”;
    环境:环境是每个访问请求的上下文。环境属性包含访问尝试的时间和位置,对象的设备,通信协议和加密强度等。

ABAC对于RBAC有以下优点:

  • 对于大型组织,基于RBCA的控制模型需要维护大量的角色和授权关系,相比而言,ABAC更加灵活;对于中小型组织,维护角色和授权关系的工作量不大,反而定制各种策略相对麻烦,更容易接受RBAC授权模型。
  • 新增资源时,ABAC仅需要维护较少的资源。而RBAC需要维护所有相关的角色。ABAC可扩展性更强、更方便。
  • RBAC支持带有动态参数的授权规则,RBAC只能基于静态的参数进行判断。
  • ABAC权限控制的粒度比RBAC更细。

三、数据平台的权限设计

3.1 RBAC下的权限设计

通常使用业界通用的RBAC权限模型,基于角色进行用户的权限控制。

在权限设计时,通常抽离出以下四个实体进行设计

  • 用户:最终拥有权限的一个个用户
  • 角色:对资源进行权限授权的集合体
  • 资源:要操作的目标对象,在不同的场景下指代的对象不同,既可以是数据,也可以是功能
  • 操作:一般分为三种,查看、编辑、删除,在设计具体的权限时可以结合资源定义具体的操作事件进行授权,比如查看某菜单,使用某功能的权限

他们之间的关系用一句话描述:基于“用户-角色-资源-操作”的权限控制,将“XX资源(菜单、数据)”的“XX操作(增删改查等)”授权给“XX角色”,然后将“XX角色”授权给“XX用户”。

RBAC模型下需要将资源划分为功能和数据两种,功能权限的划分是常规的页面功能逻辑,如下图:

Image

对于数据产品而言,数据权限的管理才是其中最重要的内容,通常而言,RBAC模型下,会采用组织机构树进行数据权限的控制,这种方式比较复杂,但是非常灵活,能够支撑多种复杂的业务数据权限诉求。

Image

3.2 ABAC下的权限设计

采用ABAC模型的描述:基于“对象-资源-操作-环境”的权限控制,描述了“XX对象(人/应用/组织/角色等)对 XX资源(页面/菜单/按钮/数据等)在 XX环境/因素(城市=北京等)下拥有 XX操作类型(增删改查等)的权限”。

四、扩展

在可能的情况下,建议使用ABAC模型进行权限管理,即使当前状况下使用较为繁琐,但是提前预留了扩展,能减少后续重构的成本和时间。