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

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

注:一切准备好,需要通过Sentry来控制faysona和faysonb用户的访问权限,限制用户只能访问安全视图表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 ',';

(可左右滑动)

准备好客户表的数据。

然后将数据导入到该表中

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的数据行。

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。

 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','','');

(可左右滑动)

创建视图

 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

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并进行查询测试

1select * from customer_row_security;

(可左右滑动)

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

2.使用faysonb登录Kerberos

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

(可左右滑动)

连接Impala并进行查询

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干货,欢迎转发和分享。

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喵了个咪的博客空间

[喵咪大数据]Hive2搭建和基本操作

[喵咪大数据]Hive2搭建 ? 说到Hadoop生态有一个不得不提的组件那就是<Hive>,Hive是基于Hadoop结构化存储引擎,能够存储海量的数据,Hi...

415100
来自专栏Hadoop实操

由Impala-3316导致的并发查询缓慢问题

18920
来自专栏Hadoop实操

如何使用StreamSets实现Oracle中变化数据实时写入Kudu

1.1K50
来自专栏安全

phpMyAdmin Transformation 任意文件包含漏洞 (需登录)

本文转载自:[phpMyAdmin 4.8.0~4.8.3 Transformation 任意文件包含/远程代码执行漏洞 (需登录/PMASA-2018-6/C...

17200
来自专栏张浩的专栏

Hive CLI常用命令

28410
来自专栏数据和云

你不可不看的 Oracle RAC 日常基本维护命令

$ srvctl status instance -d orcl -i orcl2

12740
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

7020
来自专栏乐沙弥的世界

Oracle AWR管理与维护

  AWR是Automatic Workload Repository的简称,中文叫着自动工作量资料档案库。对于AWR的管理,主要是针对快照和基线的管理而言。比...

12000
来自专栏Hadoop实操

如何在CDH集群启用Kerberos

本文档中将KDC服务安装在Cloudera Manager Server所在服务器上(KDC服务可根据自己需要安装在其他服务器)

1.8K70
来自专栏Hadoop实操

如何在Redhat7.4的CDH5.15中启用Kerberos

35150

扫码关注云+社区

领取腾讯云代金券