You need to enable JavaScript to run this app.
导航

数据脱敏

最近更新时间2023.06.09 10:36:32

首次发布时间2023.06.09 10:36:32

1. 概述

数据脱敏模块用于保护敏感数据,可以对数据进行脱敏处理,旨在以便捷的使用方式,针对各类数据进行动态脱敏处理,以保护用户的隐私和数据安全。

2. 创建脱敏表

进入数据管理-表管理,点击【创建表】。

创建脱敏表限制:

  • 外表只支持 parquet 格式的 TOS 表。

  • Array、Map、Struct 类型字段不支持脱敏。

  • 分区字段不支持脱敏。

2.1 可视化建表

选择【启用数据脱敏】,目前脱敏规则有 2 种:

  • 脱敏规则 1:按照数据类型自动匹配

  • 脱敏规则 2:所有数据类型都返回 NULL


其中脱敏规则 2 的数据类型详情如下:

LAS 目前支持列级别脱敏规则设置,可选中需要脱敏的字段,其中:

  • 脱敏与加密在字段级别互斥:已脱敏的字段不允许加密。

  • Array、Map、Struct 类型字段不允许设置脱敏。



2.2 DDL 建表

参数参数含义是否必传默认值取值范围
mask.enabled是否开启脱敏falsetrue、false

mask.algorithm

脱敏算法

mask.enabled时默认auto_match

all_null 全部设置为null auto_match 根据字段类型自动匹配

mask.columns脱敏字段mask.enabled=true时必传m1,m2 “,”分隔多个字段

脱敏表创建:

CREATE TABLE IF NOT EXISTS tpcds1g.test_mask_20230529 (m1 INT, m2 STRING, m3 ARRAY < string >) PARTITIONED BY (dt STRING) TBLPROPERTIES (
  'ttl_enable' = 'false',
  'parquet.encryption.enabled' = 'false',
  'mask.enabled' = 'true',
  'mask.algorithm' = 'all_null',
  'parquet.encryption.fields' = 'm1,m2',
  'mask.columns' = 'm1,m2'
)
set
  tqs.fallback.option = false;
set
  tqs.query.engine.type = sparkcli;
set
  las.execute.queue.account = 2100068210;
set
  las.execute.queuename = test_new;
show databases;

2.3 表编辑

LAS 支持表编辑时变更脱敏属性。进入数据管理-表管理,点击编辑,如下:

关闭【启用数据脱敏】开关,如下:

保存编辑,之后,表脱敏配置和表脱敏权限会被删除,并且不可恢复。

3. 脱敏表信息

3.1 表管理

进入数据管理-表管理,表信息展示脱敏配置。

3.2 查询分析

进入查询分析页面,表字段内展示数据安全配置。

4. 权限管理

LAS 表权限与脱敏权限是隔离的,表的创建人默认拥有表的脱敏权限,其他用户需要申请授权才能获得表的脱敏权限。
进入权限管理-脱敏权限页面,用户可管理自身具备表的 Admin 角色的表,为其他用户添加或移除脱敏权限。

5. 脱敏表读写

表的脱敏配置只对读表有影响,对写表没有影响。

通过jar作业和jdbc读取脱敏表暂时没有脱敏效果。

新建脱敏表:

CREATE TABLE `testyw`.`test_mask_20230529`(
  `m1` int, 
  `m2` string, 
  `m3` string)
PARTITIONED BY ( 
  `dt` string)
TBLPROPERTIES (
  'bytelake.archive.dateformat.pattern'='yyyyMMdd', 
  'bytelake.archive.enabled'='false', 
  'bytelake.archive.last_hour.partition'='23', 
  'bytelake.archive.snapshot.partition'='snapshot', 
  'bytelake.archive.success.file'='_SUCCESS', 
  'bytelake.auto.optimize.compaction.enable'='false', 
  'bytelake.base.file.format'='PARQUET', 
  'bytelake.bms.enable'='true', 
  'bytelake.bms.hive.sync.enable'='false', 
  'bytelake.bms.partition.enable'='false', 
  'bytelake.bucket.query.disabled'='false', 
  'bytelake.column.family.enable'='false', 
  'bytelake.datasource.write.merger.impls'='default-merger', 
  'bytelake.index.type'='NON_INDEX', 
  'bytelake.payload.class.name'='org.apache.hudi.common.model.OverwriteWithLatestAvroPayload', 
  'bytelake.table.type'='MERGE_ON_READ', 
  'bytelake.write.partitionpath.field'='dt',  
  'mask.algorithm'='auto_match', 
  'mask.columns'='m1,m2', 
  'mask.enabled'='true', 
  'parquet.encryption.enabled'='false', 
  'sourceType'='LAS', 
  'ttl_enable'='false')

开启数据脱敏,脱敏算法为自动匹配,敏感字段为 m1,m2。

5.1 无脱敏权限写表

脱敏权限对写表无影响,当有表的写权限时,即使没有脱敏权限也可以写成功。
主账号写入数据:

insert into testyw.test_mask_20230529 (m1,m2,m3,dt) values ( 10 ,'hhsssssss' , 'alsssssss','20230529')

给用户ywtest授予写权限,不授予脱敏权限,写入数据:

insert into testyw.test_mask_20230529 (m1,m2,m3,dt) values ( 10 ,'测试数据' , 'for test','20230529')

均可以写成功。

5.2 无脱敏权限读表

无脱敏权限的用户读脱敏表,获取脱敏后的结果;有脱敏权限的用户读脱敏表,获得真实结果。
使用用户 ywtest 执行查询:

select * from testyw.test_mask_20230529 where dt = '20230529'

得到结果:

对ywtest授予脱敏权限,再次执行查询,得到结果: