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"的数据,可如下配置:

Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking

列屏蔽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策略

Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking

测试数据脱敏

场景:

  1. 用户ranger_acl_test只能select表data_warehouse.dim_productbrandname="Contoso"这些行的数据。

  2. 用户ranger_acl_test在select表data_warehouse.dim_product中列productname的数据时,只显示值的Hash值。

配置:

  1. 行过滤配置

Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking

  1. 列屏蔽配置

Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking

验证

ranger_acl_test用户使用beeline连接HiveServer2,执行以下语句,并得到如下结果:

Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking