文章 查看内容

一文看懂数据集安全管控之「列权限」

一文看懂数据集安全管控之「列权限」

90 0 产品实操 2024-8-20 18:21 发布者: 严林刚

列权限设置决定用户不能看哪些字段信息。例如:销售人员不能查看成本价信息,那么就可以对数据集新增一条关联到“销售组”的不可见字段为“成本价”的列权限设置。这是最简单的场景。但是,如果一个用户同时归属于多 ...

行列权限

数据集行列权限(SecurityFilter)是一组作用在数据集上的,和用户身份相关的过滤条件。在使用数据集进行各类数据分析,包括卡片可视化分析、复杂报表、筛选器、SmartETL、归因分析、指标分析等所有涉及到数据计算的地方,行列权限都会在数据集明细层生效,确保数据安全。

行列权限,顾名思义,包含行权限和列权限:

  • 行权限作用于行数据,大多数情况下主要通过指定用户/用户组,然后用用户属性与字段值之间的匹配关系来约束用户可见的数据行范围。
  • 列权限作用于列字段数据的可见性,通过指定不可见字段来控制访问权限。不可见字段在计算时会当做Null值处理。

本文我们主要对行列权限中的“列权限”逻辑进行说明。

列权限

列权限设置决定用户不能看哪些字段信息。例如:销售人员不能查看成本价信息,那么就可以对数据集新增一条关联到“销售组”的不可见字段为“成本价”的列权限设置。这是最简单的场景。但是,如果一个用户同时归属于多个用户组,且这些用户组之间又有一些上下级关系,列权限设置在若干用户组上,甚至还设置在指定的这个用户上,那么最后的列权限控制是以什么逻辑生效的呢?要理解这里面的逻辑,我们不妨从先看一些简单的案例。

案例解析

案例1

数据集DS1上共有A,B,C,D,E五个字段。用户User1同时隶属于用户组G1和用户组G2,且G1和G2之间不存在上下层级关系。假设在数据集上对G1设置了不可见字段(A,B),对G2设置了不可见字段(B,C)。

列权限表现:User1在数据集DS1上的不可见字段为B。

逻辑释义:用户User1从G1得到的不可见字段为(A,B),从G2得到的不可见字段为(B,C),用户组之间不可见字段合并权限时取交集(反过来说就是可见字段取并集),得到不可见字段为B。

案例2

数据集DS1上共有A,B,C,D,E五个字段。用户U1隶属于用户组G2,且G1是G2的父用户组。假设在数据集上对G1设置了不可见字段(A,B),对G2设置了不可见字段(B,C)。

列权限表现:User1在数据集DS1上的不可见字段为(A,B,C)。

逻辑释义

  1. 用户组G2是G1的子用户组,从数据安全的角度考虑,需要先继承父用户组上的不可见字段集(A,B),再叠加自身的不可见字段(B,C),最后对于G2来说,实际不可见字段为(A,B,C)。
  2. 用户User1从属于G2,从G2得到的不可见字段为(A,B,C)。

案例3

数据集DS1上共有A,B,C,D,E五个字段。用户U1同时隶属于用户组G1和用户组G2,且G1是G2的父用户组。假设在数据集上对G1设置了不可见字段(A,B),对G2设置了不可见字段(B,C)。

列权限表现:User1在数据集DS1上的不可见字段为(A,B)。

逻辑释义

  1. 用户组G2是G1的子用户组,从数据安全的角度考虑,需要先继承父用户组上的不可见字段集(A,B),再叠加自身的不可见字段(B,C),最后对于G2来说,实际不可见字段为(A,B,C)。
  2. 用户User1从G1得到的不可见字段为(A,B),从G2得到的不可见字段为(A,B,C),用户组之间不可见字段合并权限时取交集(反过来说就是可见字段取并集),得到不可见字段为(A,B)。

案例4

数据集DS1上共有A,B,C,D,E五个字段。用户U1同时隶属于用户组G1和用户组G2,且G1是G2的父用户组。假设在数据集上对G1设置了不可见字段(A,B),对G2设置了不可见字段(B,C),对User1设置了不可见字段C,D。

列权限表现:User1在数据集DS1上的不可见字段为(A,B,C,D)。

逻辑释义

  1. 用户组G2是G1的子用户组,从数据安全的角度考虑,需要先继承父用户组上的不可见字段集(A,B),再叠加自身的不可见字段(B,C),最后对于G2来说,实际不可见字段为(A,B,C)。
  2. 用户User1从G1得到的不可见字段为(A,B),从G2得到的不可见字段为(A,B,C),用户组之间不可见字段合并权限时取交集(反过来说就是可见字段取并集),得到不可见字段为(A,B)。
  3. 用户User1自身的不可见字段为(C,D),用户和用户组不可见字段合并权限时取并集,得到不可见字段为(A,B,C,D)。

逻辑总结

通过以上案例,我们可以总结一下,对于一个特定的用户U,系统是如何判断他的列权限的:

  1. 首先找到这个用户所属的直接用户组(direct group,不管继承),以及这些直接用户组的所有父用户组。例如:用户U直接属于用户组X、Y、Z。所以对于用户U,现在有三条用户组继承路线(X1是X的父用户组,X2是X1父用户组、Y1是Y父用户组),即:

  2. 对于每一条继承路线,会判断其中每一个用户组是否在列权限规则内:如果在,则把相应列权限拿过来做不可见字段并集,得到一条继承路线的结果;如果没有任何一个用户组在列权限规则内,则将该列权限继承路线丢弃。例如:上述三条继承路线中,仅X和Y两条继承路线上设置了列权限,则Z这条继承路线就需要被丢弃掉。

  3. 然后把剩余继承路线的结果做不可见字段的交集,得到用户组整体对用户的列权限控制结果。

  4. 最后,如果在列权限中直接对当前用户指定了不可见字段,则需要在用户组整体对用户的不可见字段结果上,并上用户层级的可不见字段。

  5. 此外,因为“均可见”相对于“不可见”是一个反向的表达,因此在以上逻辑基础上,对于“均可见”系统做了特例处理:以上基础规则中对不可见列集合的处理,无论是取并集还是交集,只要有"均可见"规则出现,其结果都是"均可见"。

以下是观远计算列权限的逻辑示意图:

通过以上案例释义,你明白列权限的控制规则了吗?


路过

雷人

握手
3

鲜花

鸡蛋

刚表态过的朋友 (3 人)

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2024 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部