0
点赞
收藏
分享

微信扫一扫

如何使用Sentry通过视图实现Impala的行级授权

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


Fayson的github:https://github.com/fayson/cdhproject


提示:代码块部分可以左右滑动查看噢


1.文档编写目的



在CDH中要实现表的行级授权,可以使用Cloudera的产品RecordService,但是该组件尚处于开发中,Beta版,并不建议上生产,参考:

​​https://www.cloudera.com/downloads/beta/record-service.html​​


在CDH中,Sentry可以实现Hive/Impala的数据库,表,字段的授权,对于表的行授权,我们可以使用视图的方式来变相实现。本文主要是介绍如何使用Sentry通过视图实现Impala的行级授权。


  • 内容概述

1.设计说明

2.数据准备

3.环境准备

4.行级授权测试

5.总结


  • 测试环境

1.CM和CDH版本为5.13.1

2.集群已启用Kerberos和Sentry


2.设计说明



1.整体采用基于角色的权限管理,通过创建用户角色表,以及角色权限表来实现。具体的表以及安全视图设计如下图所示。


如何使用Sentry通过视图实现Impala的行级授权_数据


2.权限设计模型如下图所示


如何使用Sentry通过视图实现Impala的行级授权_hive_02

如何使用Sentry通过视图实现Impala的行级授权_hadoop_03


注:一切准备好,需要通过Sentry来控制faysonafaysonb用户的访问权限,限制用户只能访问安全视图表customer_row_security,而不能直接访问customer原表以及底层HDFS文件。因为Sentry前面Fayson讲了太多,以下实操步骤省略。


3.数据准备



首先我们创建一张客户表,“customer”


1CREATE TABLE customer
2(id string,
3name_first string,
4name_last string,
5addr_country string,
6date_of_birth string,
7phone_num string
8)
9row format delimited fields terminated by ',';

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hadoop_04


准备好客户表的数据。


如何使用Sentry通过视图实现Impala的行级授权_hadoop_05


然后将数据导入到该表中


1hadoop fs -put customer.txt /user/hive/warehouse/customer

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_数据_06


在impala中查询测试:


如何使用Sentry通过视图实现Impala的行级授权_数据_07


4.创建其他表



创建一张角色权限表,“ROLE_RIGHTS”,并插入两行数据,这里模拟共有2个权限位于US的员工us-employees可以查看addr_country为US的数据行,位于UK的员工uk-employees可以查看addr_country为UK的数据行。


1CREATE TABLE ROLE_RIGHTS 
2(
3ROLE_ID SMALLINT ,
4ROLE_NAME STRING ,
5addr_country string ,
6ENABLE string
7);
8insert into ROLE_RIGHTS values (1,'us-employees','US','1');
9insert into ROLE_RIGHTS values (2,'uk-employees','UK','1');

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hive_08


创建用户角色表,“USER_ROLES”,通过字段ROLE_ID与角色权限表ROLE_RIGHTS进行关联,并插入两行数据分别是faysona和faysonb。


 1CREATE TABLE USER_ROLES 
2(
3ROLE_ID SMALLINT ,
4USER_NAME STRING ,
5ENABLE string ,
6INSERT_TIME STRING ,
7CHANGE_TIME STRING
8);
9insert into USER_ROLES values (1,'faysona@FAYSON.COM' ,'1','','');
10insert into USER_ROLES values (2,'faysonb@FAYSON.COM' ,'1','','');

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hadoop_09


创建视图


 1create VIEW customer_row_security
2AS
3 SELECT
4 *
5 FROM customer b
6 WHERE b.addr_country IN (
7 SELECT addr_country
8 FROM ROLE_RIGHTS A
9INNER JOIN USER_ROLES B
10ON A.ROLE_ID = B.ROLE_ID
11AND A.ENABLE = '1'
12AND B.ENABLE = '1'
13 WHERE B.USER_NAME = CURRENT_USER ());

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hadoop_10


5.行级授权测试



1.使用faysona登录Kerberos


1[root@ip-172-31-16-68 ~]# kinit faysona
2Password for faysona@FAYSON.COM:
3[root@ip-172-31-16-68 ~]# klist
4Ticket cache: FILE:/tmp/krb5cc_0
5Default principal: faysona@FAYSON.COM
6Valid starting Expires Service principal
704/02/2018 03:34:23 04/03/2018 03:34:23 krbtgt/FAYSON.COM@FAYSON.COM
8 renew until 04/09/2018 03:34:23

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hive_11


连接Impala并进行查询测试


1select * from customer_row_security;

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hadoop_12


发现只能查看addr_country是US的数据行。


2.使用faysonb登录Kerberos


1[root@ip-172-31-16-68 ~]# kinit faysonb
2Password for faysonb@FAYSON.COM:

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hive_13


连接Impala并进行查询


1select * from customer_row_security;

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hadoop_14


发现只能查看addr_country是UK的数据行。


6.总结



1.目前在CDH中Hive/Impala对于行级授权,因为RecordService组件尚处于开发阶段,所以缺乏一个专门的组件来实现行级授权。


2.我们通过Sentry然后构建安全视图的方式可以达到行级授权的目的。


3.本文的实操步骤省略了通过Sentry来控制faysona和faysonb用户只能访问安全视图表customer_row_security,而不能直接访问customer原表以及底层HDFS文件。Sentry的使用与赋权可以参考Fayson前面的文章。


4.因为Fayson的测试环境开启了Kerberos,所以在USER_ROLES用户角色表中USER_NAME用户名是faysona@FAYSON.COM格式,如果没启启用Kerberos,注意用户名应该直接是faysona格式。


5.我们知道如果开启Sentry后,Hive的current_user()方法无法获取真实的用户,所以本文描述的该方法不适用于Hive,仅用于Impala。



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

如何使用Sentry通过视图实现Impala的行级授权_hadoop_15

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操


举报

相关推荐

0 条评论