针对数据:身份证,银行卡,手机号,mac地址,IMEI,车牌号,邮箱
select查询数据脱敏
处理步骤:
1、平台数据每次插入完成后,数据抽样,对每个字段的内容进行识别,判断为敏感内容则进行打标。
2、解析该sql的物理计划,根据物理计划判断select的字段是否涉及到敏感信息。
3、自定义hive脱敏udf函数mask(value),select查询的时候,将打标的敏感字段加上mask函数
如:查询sql为select a,b,c from tab,打标b字段涉及敏感数据,Sql处理成select a,mask(b),c from tab
数据导出脱敏
公司目前导出数据处理:
1、自定义export导出命令
2、导出sql为select a.id,b.name from tab_a a left join tab_b b on a.id=b.id的数据,将最终导出的数据放到临时表tab_c
脱敏处理:
1、由于tab_c表字段未进行预先打标,处理方式只能对要导出的内容进行全内容脱敏导出处理
2、sparkSql读取tab_c表,得到DataFrame后使用withColumn,将每个字段加上mask函数处理。
产生问题:
普通表只有几十个字段的情况下性能尚可,但公司有上千个字段的hive表
解决办法:
使用select方法代替withColumn
其他性能优化:
敏感字段一般是身份证手机号之类内容,这类内容必然是字符串,故,当根据字段类型是数值之类的字段可以不加mask函数处理,提供处理性能。
痛点
1、脱敏性能
(1)select查询,所有字段加脱敏udf返回,性能低
解决办法:字段预先根据百分比,抽样预判打标判断字段是否有敏感信息,只有被打标为有敏感信息的字段才需脱敏,此外,数值类型的字段基本可以排除是需要脱敏的字段。
2、内容substring切分后读取能避开脱敏规则
解决办法:
(1)绝对脱敏:所有字段只要预先被打标为,整个字段内容做脱敏处理
(2)相对脱敏:字段提前打标,判断字段内容是单个比较独立的字符,这种情况整个字段内容脱敏(可以避开substring后读取数据的漏洞),如果字段内容是一段字符串,只脱敏识别到的敏感内容(无法避开substring后读取数据的漏洞)
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/228143.html