专栏首页Hadoop实操0769-7.0.3-如何在Kerberos环境下用Ranger完成对Hive的行过滤及列脱敏

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

文档编写目的

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

本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f),作者:Fayson

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 0463-如何使用SQuirreL通过JDBC连接CDH的Hive(方式二)

    Fayson在前面的《0459-如何使用SQuirreL通过JDBC连接CDH的Hive(方式一)》简单的介绍了SQuirreL SQL Client的安装、注...

    Fayson
  • Hive在DB-Engine的排名已经超过Teradata

    也不知怎么滴,每当有一个新的数据库出来的时候,都会把Hive大哥拉出来遛一圈,踩几脚,然后再总结一下:我比你快XX倍。早些年听到这些,心中还会升起一股无名火...

    Fayson
  • 0459-如何使用SQuirreL通过JDBC连接CDH的Hive(方式一)

    SQuirreL SQL Client是一个使用Java写的访问各种数据库客户端工具,使用JDBC统一了数据库的访问接口,通过SQuirreL SQL Clie...

    Fayson
  • react.js 学习笔记

    单向数据流驱动,父节点传递到子节点 react最重要是组件 ReactJS官方地址:https://facebook.github.io/react/ GitH...

    企鹅号小编
  • 数据库怎么分库分表?

    不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务service来看, 就是可用数据库连接...

    范蠡
  • 出现这四种情况,才是考虑分库分表的时候!

    当数据库的数据量过大,大到一定的程度,我们就可以进行分库分表。那么基于什么原则,什么方法进行拆分,这就是本篇所要讲的。

    xcbeyond
  • Ant Design Vue引入Form组件样式不显示的解决方法

    使用 vue-cli 安装 Ant Design Vue 的 Form 组件,发现不能用,组件样式不显示。

    德顺
  • 小程序-获取多个formId

    如同上面的几行代码,只要你点击登录按钮,就能提交一次表单,也能获取一次formId,但是想要实现点击一次提交多次,光靠复制这几行代码,貌似还不行,无论是缩小按钮...

    前端黑板报
  • 【DeveMobile实例】d3.js 与Trianglify 制作SVG格式Low-Poly 特效

    在升级了DeveMobile 主题的时候Jeff 也顺便将主题主页进行了更新,访问主页你会看到首屏的Low-Poly 背景(每次刷新都不同),这个效果就是利用了...

    Jeff
  • 数据结构 | 每日一练(60)

    ——老子

    C语言入门到精通

扫码关注云+社区

领取腾讯云代金券