Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)
1. 概述
-
Ranger结合Hive组件对数据进行脱敏包括:
行过滤Row Filter
、列屏蔽Column Masking
两种方式。只对Select
操作进行行列级别数据脱敏
,进而实现对用户屏蔽敏感信息。 -
注意:
(1) 该功能只适用于HiveServer2
使用场景(如:Beeline/JDBC/Hue
等途径执行的Select
);
(2) 对Hive Cli(如:Hive -e)场景不适用;
(3) 对直接读取Hive表的HDFS文件场景不适用;
2. 准备示例数据
2.1 数据准备
- 对hive进行行过滤和列屏蔽操作,都根据以下数据进行:
2.2 导入hive库
切换hive
[[email protected] ~]#su - hive
创建数据文件,数据如上2.1
[[email protected] ~]$vim ranger_hive.txt
创建hive数据库
[[email protected] ~]$ hive
0: jdbc:hive2://managerhd.bigdata:2181,master>create database if not exists ranger_hive;
查看数据库
0: jdbc:hive2://managerhd.bigdata:2181,master>show databases;
使用数据库
0: jdbc:hive2://managerhd.bigdata:2181,master>use ranger_hive;
创建数据表
0: jdbc:hive2://managerhd.bigdata:2181,master>create table ranger_hive.ranger_hive_row_column(id int,name_first String,name_last String,addr_country String,date_of_birth String, phone_num String) row format delimited fields terminated by ':' stored as textfile;
导入数据
0: jdbc:hive2://managerhd.bigdata:2181,master>load data local inpath '/home/hive/ranger_hive.txt' into table ranger_hive.ranger_hive_row_column;
如果导入数据时报错,请参考:https://blog.****.net/Happy_Sunshine_Boy/article/details/103971994
3.行过滤Row-level Filter
- 新建用户:
ranger_us
- 集群节点执行:
useradd ranger_us
- 集群节点执行:
- 首先,先在ranger中配置用户ranger_us,有访问数据的权限;
- 若只允许用户
ranger_us
查看addr_country="US"
的数据,在Ranger上配置如下: - 登录hive方式1:
[[email protected] hive]#
beeline -n ranger_us -u jdbc:hive2://masterhd.bigdata:10000/ranger_hive;
0: jdbc:hive2://masterhd.bigdata:10000/ranger>select * from ranger_hive_row_column;
- 登录hive方式2:
[[email protected] hive]#
su - ranger_us
[[email protected] ~]$hive
0: jdbc:hive2://managerhd.bigdata:2181,master>use ranger_hive;
0: jdbc:hive2://managerhd.bigdata:2181,master>select * from ranger_hive_row_column;
4.列屏蔽Column Masking
屏蔽选项 | 描述 |
---|---|
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(返回与被屏蔽的列中的数据类型相同的数据类型)来自定义策略 |
- 登录hive方式1:
[[email protected] hive]#
beeline -n ranger_us -u jdbc:hive2://masterhd.bigdata:10000/ranger_hive;
0: jdbc:hive2://masterhd.bigdata:10000/ranger>select * from ranger_hive_row_column;
- 登录hive方式2:
[[email protected] hive]#
su - ranger_us
[[email protected] ~]$hive
0: jdbc:hive2://managerhd.bigdata:2181,master>use ranger_hive;
0: jdbc:hive2://managerhd.bigdata:2181,master>select * from ranger_hive_row_column;