Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking
概述
Apache Ranger对Hive数据支持两种脱敏方式:行过滤Row Filter
、列屏蔽Column Masking
。它可对Select
结果进行行列级别数据脱敏,从而达到对用户屏蔽敏感信息的目的。
注意:该功能只适用于HiveServer2使用场景(如Beeline/JDBC/Hue等途径执行的Select),对Hive Cli(如Hive -e)和直接读取Hive表的HDFS文件场景不适用。
行过滤Row Filter
行过滤允许Ranger为用户指定Fliter表达式(实际上就是Where子句)。如:只允许ranger_acl_test用户查看brandname="Contoso"
的数据,可如下配置:
列屏蔽Column Masking
列屏蔽允许Ranger为用户配置列的mask策略。mask支持以下8种策略:
-
Redact策略 - 用
x
屏蔽所有字母字符,用n
屏蔽所有数字字符。 -
Partial mask: show last 4 策略 - 仅显示最后四个字符,其他用
x
代替。 -
Partial mask: show first 4 策略- 仅显示前四个字符,其他用
x
代替。 -
Hash策略- 用值的哈希值替换原值。
-
Nullify策略 - 用NULL值替换原值。
-
Unmasked (retain original value)策略 - 原样显示。
-
Date: show only year策略 – 仅显示日期字符串的年份部分,并将月份和日期默认为01/01。
-
Custom策略 – 可使用任何有效Hive UDF(返回与被屏蔽的列中的数据类型相同的数据类型)来自定义策略。
如:Hash策略
测试数据脱敏
场景:
-
用户ranger_acl_test只能select表
data_warehouse.dim_product
中brandname="Contoso"
这些行的数据。 -
用户ranger_acl_test在select表
data_warehouse.dim_product
中列productname
的数据时,只显示值的Hash值。
配置:
- 行过滤配置
- 列屏蔽配置
验证
ranger_acl_test用户使用beeline连接HiveServer2,执行以下语句,并得到如下结果: