前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Sentry通过视图实现Impala的行级授权

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

作者头像
Fayson
发布2018-04-18 10:24:50
2.2K0
发布2018-04-18 10:24:50
举报
文章被收录于专栏:Hadoop实操Hadoop实操

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

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

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

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

3.数据准备


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

代码语言:javascript
复制
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 ',';

(可左右滑动)

准备好客户表的数据。

然后将数据导入到该表中

代码语言:javascript
复制
1hadoop fs -put customer.txt /user/hive/warehouse/customer

(可左右滑动)

在impala中查询测试:

4.创建其他表


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

代码语言:javascript
复制
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');

(可左右滑动)

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

代码语言:javascript
复制
 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','','');

(可左右滑动)

创建视图

代码语言:javascript
复制
 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 ());

(可左右滑动)

5.行级授权测试


1.使用faysona登录Kerberos

代码语言:javascript
复制
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

(可左右滑动)

连接Impala并进行查询测试

代码语言:javascript
复制
1select * from customer_row_security;

(可左右滑动)

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

2.使用faysonb登录Kerberos

代码语言:javascript
复制
1[root@ip-172-31-16-68 ~]# kinit faysonb
2Password for faysonb@FAYSON.COM:

(可左右滑动)

连接Impala并进行查询

代码语言:javascript
复制
1select * from customer_row_security;

(可左右滑动)

发现只能查看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干货,欢迎转发和分享。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档