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

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

作者头像
Fayson
发布于 2018-04-18 02:24:50
发布于 2018-04-18 02:24:50
2.5K00
代码可运行
举报
文章被收录于专栏:Hadoop实操Hadoop实操
运行总次数:0
代码可运行

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

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
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
 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
代码运行次数:0
运行
复制
 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
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
1select * from customer_row_security;

(可左右滑动)

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

2.使用faysonb登录Kerberos

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

(可左右滑动)

连接Impala并进行查询

代码语言:javascript
代码运行次数:0
运行
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
DeviceNet转Modbus-RTU协议网关详细解读
在后台有同学私信小编让讲讲DeviceNet转Modbus-RTU协议网关,今天小编给大家详细解读下,建议大家收藏哦,以免今后用到的时候找不到。
疆鸿智能
2025/06/09
880
DeviceNet转Modbus-RTU协议网关详细解读
(四)Modbus故障排查大全:从通信中断到数据异常的终极指南
Modbus以其简单可靠著称,但在实际应用中,通信故障仍不可避免。无论是信号干扰、配置错误,还是协议不兼容,这些问题都可能让工程师头疼不已。本文将系统梳理Modbus常见故障场景,并提供一套实用的排查方法论,助你快速恢复通信,让设备重新“对话”。
清风徐来春暖花开
2025/06/13
2060
(四)Modbus故障排查大全:从通信中断到数据异常的终极指南
Modbus RTU vs. Modbus TCP
Modbus RTU和Modbus TCP/IP的本质都是Modbus协议,它们都通过Modbus寄存器地址交换数据。
Hello工控
2024/07/20
3850
Modbus RTU vs. Modbus TCP
(一)Modbus的前世今生:一个工业通信协议的传奇之旅
在工业自动化领域,有一个协议如同普通话般通用——它就是Modbus。诞生于1979年的Modbus,如今已走过40余年的历程,却依然活跃在工厂车间、楼宇自动化、能源管理等各个领域。今天,就让我们一起探寻这个经典工业通信协议的前世今生。
清风徐来春暖花开
2025/06/12
1550
(一)Modbus的前世今生:一个工业通信协议的传奇之旅
ModBus RTU、ModBus ASCII、ModBus TCP的区别是什么
ModBus RTU采用二进制数据传输,是ModBus协议最常见的实现方式。它使用串行通信,并支持RS232和RS485两种接口。在RTU模式下,每个字节可以传输两位十六进制字符。ModBus RTU具有较高的传输效率和稳定性,但不太易读。它的消息帧格式由多个部分组成,比如地址码、功能码、数据等。
自动化大师
2024/08/14
3250
ModBus RTU、ModBus ASCII、ModBus TCP的区别是什么
MODBUS协议规范-中文版(免费下载)
一.背景 之前在一个项目上用代码分别实现了Modbus主站和Modbus从站(注:其实官方提供有现成的MODBUS从站库代码,并且支持大多数的嵌入式平台,如果项目比较急,把官方的库代码移植,剪裁一下就可以用了,但是我发现当你对MODBUS了解的比较熟悉之后,针对你自己特定的项目/产品完全可以自己实现更加精简,高效的代码),目前产品已经量产发布使用。现回过头来整理一下有关Modbus通讯的一些知识,打算把它写成一个系列博客,目前这是第一篇。 Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。本文主要介绍的是MODBUS-RTU。
全栈程序员站长
2022/09/14
4.2K0
MODBUS协议规范-中文版(免费下载)
modbus协议讲解及实现_通俗易懂近义词
简单地说,在我们的单片机之间互相通信,以及单片机和上位机通信中,规定了不同的内容规范,这个规范是通信的双方都需要遵守的,这样就可以实现两者的通信。
全栈程序员站长
2022/11/07
1.8K0
modbus协议讲解及实现_通俗易懂近义词
别再说RS232、RS485是通讯协议了!
我们最开始在征求大家对通讯协议的投票的时候,即《您最想了解的PLC通讯协议有哪些?》,结果如下:
Hello工控
2024/06/25
4050
别再说RS232、RS485是通讯协议了!
一文看懂Modbus协议
Modbus协议,从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,和I2C、SPI类似,总线就意味着有主机,有从机,这些设备在同一条总线上。
单片机点灯小能手
2021/07/14
4.1K0
Modbus(ASCII / RTU / TCP )三者异同
我们这期主要讨论Modbus的三种具体通信协议类别:Modbus ASCII、Modbus RTU、Modbus TCP 三者的比较。
Hello工控
2024/06/25
6530
Modbus(ASCII / RTU / TCP )三者异同
和12岁小同志搞创客开发:两个控制器之间如何实现通信?
​​​项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html
不脱发的程序猿
2021/08/10
7110
一文看懂PLC的通讯方式——AB系统(一)
一直以来,PLC跟其他设备的通讯方式都是自动化工程师入门学习的难点和要点。说它难,因为这里面牵扯到了数据通讯的一些知识,大多数从事PLC工作的人员都是从电气、电子、自动化、机电等相关专业出身的,可能上学时候也只是简单了解了一些古老的通讯方式,并没有过多研究当前主流的方式。而事实上,现阶段我们使用的主流PLC所支持的通讯方式已经从课本上升级了N个版本了。PS:
剑指工控
2021/11/09
3.2K0
一文讲透Modbus协议
Modbus是一种串行通讯协议,是Modicon公司(现在的施耐德电气 Schneider Electric) 于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议事实上的业界标准,并且现在是工业电子设备之间常见的连接方式。
sanshengshui
2020/05/26
2.6K0
EtherCAT转Modbus-RTU协议网关(EtherCAT转Modbus-RTU)
EtherCAT转Modbus-RTU实现网络协议互通是众人关注焦点,YC-ECT-RTU能够很轻松解决这个问题。在这里作者将从该设备的主要功能、技术参数、性能优势、配置方法等几个方面详细阐述。此协议转化网关在工业自动化领域至关重要,能高效转换不同协议,给用户便捷高效体验。它助力企业提升生产效率与智能化水平,切实发挥着举足轻重的作用。让我们深入了解这款强大的网关设备,开启工业自动化新征程。
远创智控研发一部
2024/09/04
1570
EtherCAT转Modbus-RTU协议网关(EtherCAT转Modbus-RTU)
modbus通讯协议解析
大家好,又见面了,我是你们的朋友全栈君。 1.什么是modbus协议,主要应用在哪些方面?(来源于: http://www.emtronix.com/product/ModBus_software.html ) Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包 括RS232和RS485),也可以选择以太网口。 2.modbus通信协议方式和数据包结构? ModBus 通讯协议分为 RTU(远方数据终端) 协议和 ASCII 协议:
全栈程序员站长
2022/09/14
1.8K0
加工机械双探头高频读写器CK-FR102AN用户开发手册「建议收藏」
CK-FR102AN系列双探头高频读写器是一款基于射频识别技术的高频RFID标签读卡器,读卡器工作频率为13.56MHZ,支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。
全栈程序员站长
2022/06/28
3080
加工机械双探头高频读写器CK-FR102AN用户开发手册「建议收藏」
【MODBUS】Modbus协议入门简介
Modbus(Modicon Communication Protocol)是一种用于工业自动化领域的通信协议,最初由Modicon(现在是施耐德电气的一部分)开发。Modbus协议被广泛应用于连接不同厂商的工业设备,实现设备之间的通信和数据交换。以下是Modbus协议的一些基本概念和特点:
帐篷Li-物联网布道师
2024/03/20
6580
Modbus协议
Modbus是全球第一个真正用于工业现场的总线协议。Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。 现在Modbus支持串行链路和以太网链路两种硬件形式,从协议上说有Modbus RTU、Modbus ASCII、Modbus TCP。现在用的最多的就是基于串行链路的Modbus RTU和基于以太网的Modbus TCP两种。在国标中规定,在串行链路上,Modbus RTU协议是默认项,而Modbus ASCII为可选项。
ccf19881030
2020/09/21
1.3K0
以太网接口和串口傻傻分不清?看完本文就懂了
路由器是一种网络设备,它的主要功能是在不同的网络之间转发数据包,实现网络互联。路由器根据数据包的目的地址,选择最佳的路径,将数据包发送到下一跳。路由器可以连接不同的网络类型,如以太网、帧中继、PPP等。
武汉利又德科技
2024/07/04
2.3K0
以太网接口和串口傻傻分不清?看完本文就懂了
单片机各种通信协议详解
I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
DS小龙哥
2022/01/07
4K0
单片机各种通信协议详解
相关推荐
DeviceNet转Modbus-RTU协议网关详细解读
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档