0769-7.0.3-如何在Kerberos环境下用Ranger完成对Hive的行过滤及列脱敏

2020-05-24 10:42:24 浏览数 (1)

文档编写目的

本篇文章主要介绍如何在CDP DC7.0.3集群中使用Ranger在Hive中进行行过滤及列脱敏,行级别的过滤相当于一个强制性的where子句,例如在订单表中,员工仅被允许查看自己所在地区的订单,其他区域的无法查看。列脱敏可以对某些敏感信息的列进行数据屏蔽,例如身份证号可以屏蔽中间的八位。

  • 测试环境

1.操作系统Redhat7.6

2.CDP DC7.0.3

3.集群已启用Kerberos

4.使用root用户操作

使用Ranger配置Hive中的行过滤

2.1 对表配置单个行过滤条件

在配置Hive中的行过滤前,需要确保授权的用户/用户组已有对要过滤的表的访问权限,即在授权给ranger_user1用户对表t1的行过滤策略前,ranger_user1需要对t1有访问权限。

1.配置ranger_user1对表t1的访问策略

配置完成后保存

2.使用ranger_user1查询t1表

用户ranger_test1对表t1有select权限,一共查询出7条记录

3.配置行过滤策略

配置完成后保存

4.使用用户ranger_test1再次访问t1表

可以看到,此时name=Tom的那条数据已经被过滤,查询结果只有6条数据。

2.2 对表配置多个行过滤条件

针对同一个表中可以配置多个行过滤条件,例如每个租户只能看到自己的数据行,下面测试对同一个表配置多个行过滤条件。

1.在所有节点创建一个新的测试用户ranger_user2,并创建Kerberos用户

2.修改访问表t1的策略,以及行过滤策略

·访问策略修改,加入ranger_user2

·行过滤策略修改,加入对ranger_user2的过滤条件

3.使用ranger_user2查询t1表

可以看到ranger_user2无法查看到name=Eric的这一条数据

4.再次使用ranger_user1查询t1表

可以看到ranger_user1仍然无法查看到name=Tom的这一条数据

由此可见,针对同一个表配置的多个行过滤条件均生效。

使用Ranger配置Hive中的列脱敏

Ranger的列屏蔽功能可以近乎实时地保护Hive中的敏感数据,可以通过设置策略,动态屏蔽或匿名化敏感的数据列,例如可以屏蔽一列的前四个或后四个字符,也可以将整列数据都屏蔽,下面会演示屏蔽的各种规则。

准备一张测试表,数据如下:

3.1 Redact

该方式是将所有字母用x代替,所有的数字字符用n代替。

1.新建列脱敏策略,使用password列进行测试

点击Add添加策略

2.使用ranger_user1进行测试,需要注意的是列脱敏的策略也是基于该用户能够访问t1表的前提才能生效。

可以看到,除了一行数据中的特殊字符外,其余的数字和字母都进行了相应的替换

3.2 Partial mask: show last 4

该方式是仅显示最后四个字符

1.修改策略,使用phone数据列进行测试

修改完成后保存策略

2.查询t1表进行测试

由上图可见,手机号这一列只显示了最后四个字符

3.3 Partial mask: show first 4

该方式是仅显示最前面四个字符

1.修改策略,使用phone列进行测试

2.查询t1表进行测试

3.4 Hash

将所有字符替换为整个单元格的值对应的哈希

1.修改策略,使用name列进行测试

修改完成后保存策略

2.查询t1表进行测试

3.5 Nullify

将所有字符替换为NULL值

1.修改策略,使用name列进行测试

2.查询t1表进行测试

3.6 Date

仅显示日期字符串的年份部分,并且默认月份和日期为01/01

1.修改策略,使用create_date列进行测试

2.查询t1表进行测试

由上图可见,日期一列只显示了年份,月份和日期使用了01-01进行代替。

3.7 Custom

该方式指定自定义的值或表达式,同时也可以使用任何有效的自定义的UDF

1.修改策略,使用phone列进行测试,屏蔽掉中间的四位数字

2.查询t1表进行测试

如上图可见,phone对应的数据中间的四位数字都被屏蔽了。

总结

1.Hive的行过滤可以对同一张表针对不同用户配置多个条件,可以满足实际场景的很多需要,例如在访问该表时不同的租户只能看到自己的数据。

2.Hive的行过滤有助于简化Hive查询。配置了行过滤相当于提供默认的where子句,Hive每次尝试访问数据时都会应用该条件,这有助于简化Hive查询的编写,不需要再将where子句添加到原本的查询语句中。

3.Hive的列脱敏中每个列都应具有单独的屏蔽策略,同一个策略只能针对一个列,在处理访问请求时,会按照策略中条件的顺序进行屏蔽。

4.Hive的列脱敏不支持通配符的匹配。如表和字段不能配置为*值。

5.在使用Date进行列脱敏时,Hive中对应字段的格式需要是时间类型,在测试中使用的date类型。

6.在对列进行脱敏时,除了使用指定的选项外,还可以用自定义的表达式或者UDF来进行脱敏。

0 人点赞