前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0769-7.0.3-如何在Kerberos环境下用Ranger完成对Hive的行过滤及列脱敏

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

作者头像
Fayson
发布2020-05-24 10:42:24
1.7K0
发布2020-05-24 10:42:24
举报
文章被收录于专栏:Hadoop实操Hadoop实操

文档编写目的

本篇文章主要介绍如何在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来进行脱敏。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档