温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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,'[email protected]' ,'1','','');
10insert into USER_ROLES values (2,'[email protected]' ,'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 [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
(可左右滑动)
连接Impala并进行查询测试
1select * from customer_row_security;
(可左右滑动)
发现只能查看addr_country是US的数据行。
2.使用faysonb登录Kerberos
1[root@ip-172-31-16-68 ~]# kinit faysonb
2Password for [email protected]:
(可左右滑动)
连接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用户名是[email protected]格式,如果没启启用Kerberos,注意用户名应该直接是faysona格式。
5.我们知道如果开启Sentry后,Hive的current_user()方法无法获取真实的用户,所以本文描述的该方法不适用于Hive,仅用于Impala。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操