安全配置单元:如何在配置单元中的列中屏蔽json对象中的特定键值对(包含pii数据)?

wsxa1bj1  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(270)

json对象的键值对中存在pii数据,该键值对存储在我的配置单元表中的一列中。是否有任何方法可以只屏蔽所需键值对的值,而不屏蔽其他键值对?

ttisahbt

ttisahbt1#

你可以用 regexp_replace 用字符串替换json中的某些值(请参见 json_with_number_replaced 列)。
更好的应用 sha256 而不是简单的替换,因为这个函数是加密强(不可逆单向函数),确定性和冲突容忍。sha256散列函数的这些属性允许您加入模糊处理的值(如果使用相同的模糊处理方法)并进行聚合。模糊处理后,您仍然可以计算不同的手机号码。看到了吗 mobile_number_obfuscated 以及 json_with_number_obfuscated 下例中的列计算:

select json original_json,
       s.original_mobile_number,
       s.mobile_number_obfuscated,
       regexp_replace(s.json, '(mob_no":[\\s]?")([+]?[\\d]+)','$1xx') as json_with_number_replaced,
       regexp_replace(s.json, '(mob_no":[\\s]?")([+]?[\\d]+)',concat('$1',mobile_number_obfuscated)) as json_with_number_obfuscated
from
(
select regexp_extract(s.json, 'mob_no":[\\s]?"([+]?[\\d]+)',1) as original_mobile_number,
       java_method('org.apache.commons.codec.digest.DigestUtils', 'sha256Hex', regexp_extract(s.json, 'mob_no":[\\s]?"([+]?[\\d]+)',1)) mobile_number_obfuscated,
       s.json
from
(--original data
select '{ "name":"John", "age":30, "car":null, "mob_no": "+99999999"}' as json
)s
)s;

OK
original_json   original_mobile_number  mobile_number_obfuscated        json_with_number_replaced       json_with_number_obfuscated
{ "name":"John", "age":30, "car":null, "mob_no": "+99999999"}   +99999999       98ae38dddc1994179e21d104feb7b09e5627953d9fe9b9851239ac445b6de3cd        { "name":"John", "age":30, "car":null, "mob_no": "xx"}  { "name":"John", "age":30, "car":null, "mob_no": "98ae38dddc1994179e21d104feb7b09e5627953d9fe9b9851239ac445b6de3cd"}
Time taken: 1.988 seconds, Fetched: 1 row(s)

在这个示例中,我演示了如何使用regexp\u replace替换json中某个键的值,以及如何使用sha256模糊pii数据。

相关问题