首页 > 其他分享 >如何使用Sentry通过视图实现Impala的行级授权

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

时间:2022-10-04 14:05:49浏览次数:78  
标签:customer 行级 faysona Sentry 视图 ROLE USER 滑动

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


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的行级授权_hive


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


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

如何使用Sentry通过视图实现Impala的行级授权_数据_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的行级授权_数据_04


准备好客户表的数据。


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


然后将数据导入到该表中


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

(可左右滑动)


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


在impala中查询测试:


如何使用Sentry通过视图实现Impala的行级授权_hadoop_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的行级授权_数据_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,'[email protected]' ,'1','','');
10insert into USER_ROLES values (2,'[email protected]' ,'1','','');

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_数据_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 [email protected]:
3[root@ip-172-31-16-68 ~]# klist
4Ticket cache: FILE:/tmp/krb5cc_0
5Default principal: [email protected]
6Valid starting Expires Service principal
704/02/2018 03:34:23 04/03/2018 03:34:23 krbtgt/[email protected]
8 renew until 04/09/2018 03:34:23

(可左右滑动)


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


连接Impala并进行查询测试


1select * from customer_row_security;

(可左右滑动)


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


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


2.使用faysonb登录Kerberos


1[root@ip-172-31-16-68 ~]# kinit faysonb
2Password for [email protected]:

(可左右滑动)


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


连接Impala并进行查询


1select * from customer_row_security;

(可左右滑动)


如何使用Sentry通过视图实现Impala的行级授权_hive_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用户名是[email protected]格式,如果没启启用Kerberos,注意用户名应该直接是faysona格式。


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



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


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

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



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

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

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


标签:customer,行级,faysona,Sentry,视图,ROLE,USER,滑动
From: https://blog.51cto.com/u_14049791/5731230

相关文章

  • 0633-6.2.0-什么是Apache Sentry
    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的github:​​https://github.com/fayson/cdhproject​​提示:代码块部分可......
  • 如何使用Sentry管理Hive仓库目录外的其他目录的acl同步
    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的github:​​https://github.com/fayson/cdhproject​​提示:代码块部分可......
  • 视图集
    两个视图基类1.drf提供了一个顶层的视图APIView,可以通过继承APIView写视图,之后我们写的代码可能重复代码比较多,就可以使用面向对象的继承、封装,GenericAPIView继承了APIVi......
  • 所有视图的基类、Mixin类视图、通用视图类、子类视图
    APIView是RESTframework提供的所有视图的基类,继承自Django的View父类。APIView与View的不同之处传入到视图方法中的是RESTframework的对象,而不是Django的HttpResponse......
  • Spring MVC入门(五):视图
    视图简介SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户SpringMVC视图的种类很多,默认有转发视图和重定向视图当工程引入jstl的依赖,转发视图......
  • drf之视图集
    一、试图基类#我们之前学习的drf在编写视图类的时候是继承了APIView和GenericAPIView#GenericAPIView的属性和方法回顾:-属性-queryset#要......
  • 【Django-rest-framework框架】第04回 视图集
    目录1.两个视图基类1.1GenericAPIview属性和方法1.2基于APIView写5个接口1.3基于GenericAPIview写5个接口2.5个视图扩展类3.9个视图子类4.视图集5.源码分析ViewSet......
  • drf之视图组件
    drf请求与响应1.request请求:通过http请求,经过OSI协议,拿着前端提供的数据给了django,django把请求给了request的对象,drf又对request进行了一次封装,每次请求都是一个新的req......
  • drf请求与相应(Request,Response),drf能够解析的请求编码,响应编码,GenericAPIView和APIVi
    drf请求与响应Request类(请求)Response类(响应)drf 能够解析的请求编码,响应编码能够解析的请求编码响应编码GenericAPIView和APIView(2个视图基......
  • drf之请求与响应,drf之视图组件,2个视图基类
    1.drf之请求与响应在继承drf中的APIView时Request它的请求对象request就不是原来的那个request了(具体去看APIView源码分析),所以没钱请求的request都是一个新的对象,这......