前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据中台建设】数据权限的设计思路

【数据中台建设】数据权限的设计思路

原创
作者头像
用户11194670
发布2024-07-05 16:26:57
6880
发布2024-07-05 16:26:57

【数据中台建设系列之五】数据中台-数据权限

数据安全是数据中台建设的一个核心功能,本篇文章将主要介绍数据安全中的一个重要模块—数据权限,包含数据行级权限和列级权限的一些设计思路,如果你也正在调研数据权限或者有这个计划,相信本篇文章一定能给你带来不一样的灵感。

一、什么是数据权限

数据权限是指用户能够访问和操作的数据资产,例如某个具体的数据表、数据字段等。数据权限确保了数据资产的安全性和合规性,通过数据权限管理,可以更好地控制用户对数据资产的访问和操作,提高数据中台的价值。

二、数据权限目标

数据权限主要包含数据的行级权限和列级权限。通过构建数据的行级权限,不同⽤⼾访问同⼀个数据模型时,由于权限规则不同,获取到的数据集也不同,⾏权限限定的是⼀个范围。而列级权限,主要是对数据中某一个字段进行隐藏或者做不可见处理,从而达到数据隔离或者脱敏目的,列级权限限定的是一个状态。

三、数据权限系统流程

数据权限主要包含应用层、服务层和执行层三大块。如下图中的所示:

整体流程
整体流程

其核心思想是所有的行列权限都作用在一个具体的数据服务API接口或者一个BI报表的模型上(再具体点就是一个SQL上),然后对查看该报表或者调用该数据服务API接口的业务人员配置对应的行级和列级权限,这样就达到了同一个报表或API接口在面对不同人员调用时,看到的数据是不一致的,从而实现了数据行列权限的控制。

  • 应用层

包含页面权限配置规则及业务方调用数据服务API接口等(在数据服务篇介绍过,所有的业务方不允许直连数仓);

  • 服务层

所有请求底层数仓数据的SQL,都会被数据权限服务拦截,通过权限校验和SQL拦截对原始SQL进行改写;

  • 执行层

基于Apache Doris构建的实时数仓作为执行层,就是执行已经经过数据权限服务修改过后的SQL语句,将执行结果返回给应用方;

四、数据权限设计实现

在数据权限中,将用户划分为三个层级:白名单用户、规则用户和其他用户。

  • 白名单用户

⽩名单⽤⼾是指对规则不⽣效的⽤⼾,它的优先级最⾼。如果⼀个⽤⼾既是规则⽤⼾,⼜是⽩名单⽤⼾,那么他在做权限判定时,会优先判定为⽩名单⽤⼾,⽩名单⽤⼾可以访问该数据集下的所有数据,对规则不⽣效。

  • 规则⽤⼾

该数据集(同一个SQL)下所有规则中包含的⽤⼾。如果该⽤⼾不是⽩名单⽤⼾,那么就按照他⽬前拥有的权限规则进⾏校验。

  • 其他用户

其他⽤⼾是指除了⽩名单⽤⼾和规则⽤⼾以外的所有⽤⼾。这部分⽤⼾拥有两个权限属性:拥有所有权限和⽆任何权限。拥有所有权限就是值这部分其他用户可以查看该数据集下的所有数据,不受规则约束,无任何权限就是纸面意思,没有查看该数据集数据的任务权限。

4.1 行级权限

行级权限在SQL语句中,我们可以理解为就是增加一个WHERE条件。具体的配置页面设计如下:

赋权对象:这个可以根据公司实际场景来,可以是人员角色,也可以是人员部门等。

赋权规则:规则深度可以限定为三层(按实际需求来),但三层的关系只能是 且-或-且或者或-且-或这两种方式,这个和SQL中的WHERE条件拼接相关。

在编辑条件栏中可以添加每个具体的规则,这里需要注意的一点就是,所有的筛选字段只能是数据集模型中的字段(也就是SELECT后面的字段)。目前对字段的过滤有三种方式:枚举筛选,标签筛选和条件筛选。

  • 枚举筛选

就是对具体字段枚举出固定的几个值,用户只能访问这几个值相关的数据;

  • 标签筛选

定义一组标签,用户与标签形成关系,每个用户对同一个标签都有不同的值,这个也相当于是枚举;

  • 条件筛选

定义了许多过滤方式,比如: 包含,开头是,结尾是,大于,等于,小于等;

以上就是一个数据集的行级权限的设计方式和配置流程,下来给大家简单展示两个效果

我们首先定义一个数据集DATASET-A标准SQL : "SELECT xxx FROM xxx "。

样例1

某用户只能查看DATASET-A数据集中数据库id字段为"2,3,4"的数据,规则配置如下:

经过数据权限拦截改写之后,实际查询数仓的SQL变为如下:

代码语言:sql
复制
SELECT xxx
FROM 
    (SELECT xxx
    FROM xxx) _D_S_A_
WHERE _D_S_A_.`db_id` IN (2, 3, 4)
样例2

某用户可以查看DATASET-A数据集中数据库id字段为"2,3,4"的数据,还可以查看引擎 = "doris"或者创建时间> "2021-11-01"的数据,规则配置如下:

经过数据权限拦截改写之后,实际查询数仓的SQL变为如下:

代码语言:sql
复制
SELECT xxx
FROM 
    (SELECT xxx
    FROM xxx) _D_S_A_
WHERE _D_S_A_.`db_id` IN (2, 3, 4)
        AND (_D_S_A_.`engine` = 'Doris'
        OR _D_S_A_.`create_time` > '2021-11-01')

通过以上这两个例子,相信大家对数据的行级权限有了一定了解了,接下来,我们继续看数据的列级权限。

4.2 列级权限

在上文我们已经说过了,列级权限是字段的一个状态,主要功能是将字段进行脱敏或置为不可见状态。列级权限中,有几个关键概念:

  • 白名单

和行级权限是一样的道理,如果是白名单用户,所有的列级规则都不生效,可以访问所有字段。

  • 其他字段

是指当前用户对这个数据集所有字段中未设定规则的字段,目前对其他字段有"禁止查看"和"允许查看"两个权限配置。

举个例子:

数据集A有"name,age ,phone,address"4个字段,如果管理员对张三设置了对数据集A中的"phone"字段脱敏规则,那除了phone字段以外的"name,age,address"都属于其他字段,此时:

如果将其他字段设置为禁止查看,那么张三就只能查看数据集A中的"phone"字段,同时给字段还是脱敏状态;

如果将其他字段设置为允许查看,那么张三可以看到数据集A下的所有字段内容,但"phone"字段是脱敏状态;

这个地方稍微有点绕,可以好好理解一下。

  • 添加规则

如下图所示可以添加一个列级规则:

从图中,我们可以看到列级规则包含禁止查看和数据脱敏两个选项,那该规则如何生效?这块列举出4种生效方式:

生效方式

说明

所有人生效

指该条列规则对所有⼈⽣效

所有人不生效

该条列规则对所有⼈不⽣效

指定人生效

指定⽤⼾对某个规则⽣效

指定人不生效

指定⽤⼾对某个规则不⽣效

脱敏选项也包含众多方式,比如:前几位脱敏,后面几位脱敏,中间几位脱敏等,这块实现思路就是通过SQL中一些字符串的操作函数进行切分替换拼接实现的。

以上就是数据权限中列级权限的一个整体配置流程和实现思路,接下来我们一起看看这个例子:

样例3

数据集DATASET-A标准SQL : "SELECT xxx FROM xxx ",用户张三的列级权限规则为:

<u>对"chinese_name"字段进行中间3位脱敏,对"charge_person" 字段进行脱敏,对"engine"的后三位脱敏</u>

经过数据权限拦截改写之后,实际查询数仓的SQL变为如下:

代码语言:sql
复制
SELECT
	_D_S_A_.`tbl_desc` AS `tbl_desc`,
	_D_S_A_.`tbl_typ e` AS `tbl_type`,
	CONCAT(SUBSTR(`engine`, 1, 3), '***') AS `engine`,
	_D_S_A_.`create_time` AS `create_time`,
	_D_S_A_.`create_table_sql` AS `create_table_sql`,
	CONCAT(SUBSTR( `charge_person`, 1, 1), '**') AS `charge_person`,
	CASE
		WHEN CHAR_LENGTH(`chinese_name`) <= 3 THEN '***'
		ELSE REPLACE(`chinese_name`, SUBSTR(`chinese_name`, 3, CHAR_LENGTH(`chinese_name`)-3), '***')
	END AS `chinese_name`,
	_D_S_A_.`sec urity_level` AS `security_level`,
	_D_S_A_.`create_time` AS `create_time`,
	_D_S_A_.`expression_add_field2` AS `expression_add_field2`
FROM
	(
	SELECT
		xxx
	FROM
		xxx ) _D_S_A_

五、总结

本数据权限系统已经在企业内部广泛应用,目前数据权限配置已超千人,包括数据服务,BI报表等其他项目,经受住了各种业务场景的考验,该系统已稳定运行2年之久,是一个经过时间沉淀的系统。在数据中台建设中,数据权限建设是非常重要的一环,本篇文章详细介绍了整体设计思路和配置流程,希望对大家有一定的借鉴帮助。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是数据权限
  • 二、数据权限目标
  • 三、数据权限系统流程
  • 四、数据权限设计实现
    • 4.1 行级权限
      • 样例1
      • 样例2
    • 4.2 列级权限
      • 样例3
  • 五、总结
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档