hive 时间转字符串_07697.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的访问策略

8b2568b108e186a15c48c01f21770976.png

6775549cfb5fc401b4d1e524076a1626.png

配置完成后保存

2.使用ranger_user1查询t1表

513832d4f98b1b54a3b8061fa84608b4.png

5246cc6a987004cd986289f55b2efaa5.png

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

3.配置行过滤策略

6823b823b231955e598e42b6b8e673c1.png

0c8934d784dacc243ba5ee4331eeddcf.png

c7501a736c0f5cccefeb6a8c85f3a0a6.png

配置完成后保存

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

a35843d5a915dcd93db42d1103a09b19.png

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

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

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

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

87ad0f8bf2aaabb3b1b6a38e6fbbc81e.png

c2dd69fdec1d538ef56b3894ede409e3.png

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

·访问策略修改,加入ranger_user2

28ebc88d5408dc70e470a3d555ab1ac7.png

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

03058d4e0b3b84499ca02d7d00e45a44.png

3.使用ranger_user2查询t1表

a63fab7a272c5ab97228c0b1254fba05.png

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

4.再次使用ranger_user1查询t1表

7bf9328208ce595deb442024b4e3a761.png

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

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

使用Ranger配置Hive中的列脱敏

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

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

9e9b695ab369502a2be42a793d60c906.png

3.1 Redact

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

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

b22da10e7d490dc0440de19f7e33bfa9.png

011a3c716a6d3a6a2627c9a09d62e944.png

点击Add添加策略

86da896b277cbb117bd41bb9577c30ea.png

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

a5d19178b52c0d87308e3e8c7634c7ea.png

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

3.2 Partial mask: show last 4

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

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

df1e7b61197e13cd4354145b38111639.png

895de4cc121a0e3c1928c0e2c57d801c.png

修改完成后保存策略

2.查询t1表进行测试

686bb309cc6879dec0565ffa1caf27a1.png

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

3.3 Partial mask: show first 4 

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

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

655fffb18e49e4ec1f52e6af473a3544.png

2.查询t1表进行测试

067e22984a54c51181b4c0cadf24c827.png

3.4 Hash

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

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

e9e3ef12226a28f9cd65543e6e7aa380.png

fa2943ac61205812f7b5f1ea5a645313.png

修改完成后保存策略

2.查询t1表进行测试

4d40f2e45841f3c5139acbc4d9cc123b.png

3.5 Nullify

将所有字符替换为NULL值

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

64c5299b12fbd4d893f77dcb1347630d.png

2.查询t1表进行测试

390ba1b6cb3bbf37095da0c220a94376.png

3.6 Date

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

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

a74ebc6fc521db3109361a339c73e8cd.png

8986f871ce2786ccd2231de9da75c5e1.png

2.查询t1表进行测试

6de962544d93b73e8f243fe5dcb4eaf7.png

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

3.7 Custom

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

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

f4161b720467eed77c742c66dd981039.png

773bcbc2b11ab6a0cad94273b1e0adcb.png

2.查询t1表进行测试

41a37561685b555913dba2c454120e50.png

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

总结

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值