数据脱敏模块用于保护敏感数据,可以对数据进行脱敏处理,旨在以便捷的使用方式,针对各类数据进行动态脱敏处理,以保护用户的隐私和数据安全。
进入数据管理-表管理,点击【创建表】。
创建脱敏表限制:
外表只支持 parquet 格式的 TOS 表。
Array、Map、Struct 类型字段不支持脱敏。
分区字段不支持脱敏。
选择【启用数据脱敏】,目前脱敏规则有 2 种:
脱敏规则 1:按照数据类型自动匹配
脱敏规则 2:所有数据类型都返回 NULL
其中脱敏规则 2 的数据类型详情如下:
LAS 目前支持列级别脱敏规则设置,可选中需要脱敏的字段,其中:
脱敏与加密在字段级别互斥:已脱敏的字段不允许加密。
Array、Map、Struct 类型字段不允许设置脱敏。
参数 | 参数含义 | 是否必传 | 默认值 | 取值范围 |
---|---|---|---|---|
mask.enabled | 是否开启脱敏 | 否 | false | true、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;
LAS 支持表编辑时变更脱敏属性。进入数据管理-表管理,点击编辑,如下:
关闭【启用数据脱敏】开关,如下:
保存编辑,之后,表脱敏配置和表脱敏权限会被删除,并且不可恢复。
进入数据管理-表管理,表信息展示脱敏配置。
进入查询分析页面,表字段内展示数据安全配置。
LAS 表权限与脱敏权限是隔离的,表的创建人默认拥有表的脱敏权限,其他用户需要申请授权才能获得表的脱敏权限。
进入权限管理-脱敏权限页面,用户可管理自身具备表的 Admin 角色的表,为其他用户添加或移除脱敏权限。
表的脱敏配置只对读表有影响,对写表没有影响。
通过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。
脱敏权限对写表无影响,当有表的写权限时,即使没有脱敏权限也可以写成功。
主账号写入数据:
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')
均可以写成功。
无脱敏权限的用户读脱敏表,获取脱敏后的结果;有脱敏权限的用户读脱敏表,获得真实结果。
使用用户 ywtest 执行查询:
select * from testyw.test_mask_20230529 where dt = '20230529'
得到结果:
对ywtest授予脱敏权限,再次执行查询,得到结果: