Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)

文章目录

  • 1. 概述
  • 2. 准备示例数据
    • 2.1 数据准备
    • 2.2 导入hive库
  • 3.行过滤Row-level Filter
  • 4.列屏蔽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进行行过滤和列屏蔽操作,都根据以下数据进行:
    Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第1张图片

2.2 导入hive库

切换hive
[root@managerhd ~]# su - hive

创建数据文件,数据如上2.1
[hive@managerhd ~]$ vim ranger_hive.txt

创建hive数据库
[hive@managerhd ~]$ 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.csdn.net/Happy_Sunshine_Boy/article/details/103971994

3.行过滤Row-level Filter

  • 新建用户:ranger_us
    • 集群节点执行:useradd ranger_us
  • 首先,先在ranger中配置用户ranger_us,有访问数据的权限;
    Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第2张图片
    Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第3张图片
  • 若只允许用户 ranger_us 查看addr_country="US"的数据,在Ranger上配置如下:
    Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第4张图片
    Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第5张图片
  • 登录hive方式1:

[root@masterhd 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:

[root@masterhd hive]# su - ranger_us
[ranger_us@masterhd ~]$ hive
0: jdbc:hive2://managerhd.bigdata:2181,master> use ranger_hive;
0: jdbc:hive2://managerhd.bigdata:2181,master> select * from ranger_hive_row_column;

Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第6张图片

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(返回与被屏蔽的列中的数据类型相同的数据类型)来自定义策略

Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第7张图片
Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第8张图片

  • 登录hive方式1:

[root@masterhd 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:

[root@masterhd hive]# su - ranger_us
[ranger_us@masterhd ~]$ hive
0: jdbc:hive2://managerhd.bigdata:2181,master> use ranger_hive;
0: jdbc:hive2://managerhd.bigdata:2181,master> select * from ranger_hive_row_column;

Hive3.1.0结合Ranger1.1.0数据脱敏(行过滤Row-level Filter、列屏蔽Column Masking)_第9张图片

参考:
https://cwiki.apache.org/confluence/display/RANGER/Row-level+filtering+and+column-masking+using+Apache+Ranger+policies+in+Apache+Hive

你可能感兴趣的:(Hive,Ranger)