文档章节

基于Sentry实现数据访问权限控制

hblt-j
 hblt-j
发布于 2018/12/12 18:39
字数 2102
阅读 455
收藏 2

Sentry初识

Sentry是适用于Hadoop生态环境、基于角色的授权管理系统,可以模块化集成到HDFS、Hive、Impala。它是一个策略引擎,运行定义授权规则,以校验用户对数据模型的访问请求。

授权粒度

Sentry数据访问授权的实现依赖于授权对象和操作,授权对象定义要受授权规则约束的对象,可以是服务器(server)、数据库、表、视图甚至是列;操作定义运行的操作粒度,包括查找(select)、删除(delete)、创建(create)等。授权对象和操作级别的组合模式提供了不同特权级别的访问控制。

在某些场景下,管理员可以使用视图的方式限制对行或列的访问,能一定程度上减少权限设置的工作量。

Role

角色是一个权限集合,定义授权规则的基本单位。角色的概念允许将多个授权规则集合到一起,然后再把权限相同的用户分到一个角色里,很方便后续权限管理维护。比如不同业务的人员访问不同的业务表,可以建多个角色,再给角色赋予相对应的业务表访问权限,如果这类用户要修改权限,只需对角色进行权限更改。

Group

组是一个用户集合,默认情况下Sentry使用Hadoop中配置的组映射机制(比如使用OS的用户组),Sentry使用Hadoop配置的组映射机制,以确保Sentry看到组映射和Hadoop生态系统中其他组件看到的相同。把一个Group加到多个Role里,这样就给用户分配到了权限,可以将多个用户分到一个组里。组的概念进一步降低了权限管理的复杂度。

授权一般操作

1、创建角色

2、给角色赋权限

3、用户所属组加入到授权实体(角色)

Sentry与Hive、Impala、Hue集成

Hive、Impala等集成Sentry后可以提高数据访问的安全性、限制用户访问特定资源。

如果Hadoop集群是用Cloudera Manager管理的,安装Sentry就特别简便,在cm上next、next就可以了,安装后和Hive、Impala、Hue的集成也很简单,只需要在对应的组件配置界面上勾选上sentry就可以了,比如:

如果Hive集成了Sentry,会强制启用数据库中的存储通知设置,开启这个配置后,对一个表进行大并发DDL操作(比如删除分区、增加分区等)时可能导致Hive Metastore超时。

通过hive管理Sentry:hive和Sentry集成后,可在beeline通过命令管理Sentry权限,需要注意的是Hive Cli不支持Sentry管理。赋权用GRANT语句,权限回收用REVOKE语句。如前所述,权限对象包括服务(SERVER)、数据库(DATABASE)、表(TABLE),权限操作包括:ALL、SELECT、UPDATE。

赋权例子:

创建角色:CREATE ROLE

组分配角色:GRANT ROLE TO GROUP

服务级赋权:GRANT ON SERVER TO ROLE

数据库赋权:GRANT ON DATABASE TO ROLE

表赋权:GRANT ON . TO ROLE

权限回收例子:

回收数据库权限:REVOKE ON DATABASE FROM ROLE

查看某个角色的权限:SHOW GRANT ROLE

Sentry集成到Hue的好处:在beeline管理sentry权限不够值观,要输入命令,而Hue上是以图形化实现等价操作,包括创建role、配置role的权限策略、给group分配role等。具体的在hue上的相关操作比较简单,不再赘述。

需要注意的是配置管理sentry权限的用户,要有所有表的访问权限,否则看到的数据库、表不完全。

Hadoop用户、用户组和Hue用户、用户组以及Sentry角色的关系:

如前所述,Sentry使用Hadoop用户组策略,而Hadoop默认是OS用户组,Hue和Sentry集成后,就要求用户组同时在Hue和OS里都要创建。

Hue权限初识

Hue权限总体上可以分为两类:一类是功能权限、一类是数据权限

功能权限是对Hue上一系列功能使用的授权,比如用户登陆Hue、使用Hive引擎、使用Impala引擎以及管理用户等功能性权限;数据权限的粒度是数据级别的,就是对数据库、数据表的访问权限,甚至是字段的访问权限,数据权限控制用户能看到哪些对象,对避免信息泄露、提高数据安全性是非常有用的。

管理Hue的功能权限相对较简单,过程是先创建用户、用户组,创建后的用户默认就有了登录Hue的权限,而用户组是基本的权限管理单位。把用户分到用户组,最后再给用户组赋予特定的权限,这样用户就有了分配后的权限。一个企业一般都有统一的LDAP认证体系,Hue也可以集成LDAP,这样避免用户创建、密码管理等维护成本,下面会有相信阐述。

Hue没有数据授权的功能,但可以依赖Sentry实现,和Sentry的集成是这篇文章的主要内容,在谈Sentry前先聊下Hue集成LDAP,这可让我们从用户管理这块解脱出来。

Hue集成LDAP

如前所述,通过与LDAP集成,用户可以使用LDAP目录中存储的现有凭证登录Hue,将 Hue与LDAP集成后,无需在Hue中独立管理用户信息。

下面演示集成步骤:

1、身份验选择证LDAP,启用ldap身份验证

2、并配置LDAP Server url。ldaps://开头的url对用户名、密码以加密形式传输,ldap://是以明文形式传输

 

 

3、配置搜索绑定机制,设置search_bind_authentication以启用搜索绑定;

查找用户和组的搜索库的专有名称通过base_dn配置设置进行定义。

还有一种是使用直接绑定机制,使用直接绑定时,必须使用精确的nt_domain 或ldap_username_pattern进行身份验证。使用直接绑定时,如果定义了 nt 域 (通过 nt_domain 配置设置进行定义) 属性,则使用以下形式创建用户可分辨名称模板:@nt_domain。此模板用于从基本可分辨名称开始,搜索所有目录子树。如果未配置 nt 域,则 Hue 搜索用户的精确可分辨名称模式 (通过 ldap_username_pattern 配置设置进行定义)。在这种情况下,服务器从基本可分辨名称开始,在所有目录子树中搜索匹配 ldap_username_pattern 值。

一般首选方法是搜索绑定,本文也是按照搜索绑定做的。

4、LDAP身份验证首先绑定到服务器并建立连接。随后,建立的连接用于任何后续查询以搜索LDAP用户信息。配置绑定到ldap服务的信息,bind_dn:定义绑定可分辨名称 (或 DN) ;bind_password:配置设置绑定密码

 

 

Sentry环境测试

一、Hive

JDBC访问带Sentry环境的Hive,测试不同用户对hive数据的访问权限,实现见下:

 

 

如果用户没有访问权限,会报异常:

二、Impala

JDBC访问带Sentry环境的impala,需要注意的是连接的url,设置成AuthMech=3。

三、Spark SQL查询Hive

hive引擎使用hadoop的mapReducer引擎做文件解析和查询,spark使用的是自己的sql引擎做的解析,把每个数据库表当成一个RDD,直接操作底层HDFS。所以对于没有集成Sentry的HDFS来说,实现代码没有任何差别。

 

 

四、Hive查Hbase

Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询。sentry同样也能对hive查hbase的表进行权限设置,测试代码同hive,不再赘述。

 

本文转载自:https://kuaibao.qq.com/s/20181119G0ASM300?refer=spider

hblt-j
粉丝 24
博文 218
码字总数 73000
作品 0
海淀
架构师
私信 提问
Hadoop Sentry 学习

什么是Sentry? Sentry 是Cloudera 公司发布的一个Hadoop开源组件,它提供细粒度基于角色的安全控制 Sentry下的数据访问和授权 通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的...

幽芒
2014/08/06
3.8K
0
Apache Sentry实战之旅(一)—— Impala+Sentry整合

默认是以这个超级用户运行服务,执行和操作的,要实现不同用户之间细粒度的权限控制,需要与整合。是下的一个开源项目,它基于的授权模型实现了权限控制,与它整合以后,就能实现不同用户之间...

九州暮云
07/07
148
0
使用Apache Sentry的Presto

概观 Apache Sentry是一个基于角色的粒度授权模块,适用于Hadoop。Sentry提供了对经过身份验证的用户和应用程序(如Presto)的数据控制和强制执行精确级别权限的功能。 Presto Enterprise与A...

hblt-j
02/13
181
0
Apache Sentry 第一弹:Server启动、连接Hue、分组详解

前言: Sentry是Hadoop安全方面的一个开源组件,目前还在孵化中,地址:https://sentry.incubator.apache.org。 原属于Cloudera开发,后来贡献给了Apache。关于它的强大直接摘录一段,全文请...

王二铁
2015/08/21
3.8K
0
Impala和Hive集成Sentry、Kerberos认证

关于 Kerberos 的安装和 HDFS 配置 kerberos 认证,请参考 HDFS配置kerberos认证。 关于 Kerberos 的安装和 YARN 配置 kerberos 认证,请参考 YARN配置kerberos认证。 关于 Kerberos 的安装和...

hblt-j
2018/12/13
83
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
41分钟前
5
0
Redis

一、Redis支持的几种数据类型:字符串、List、SET、HASH、ZSET 二、Redis的缓存技术主要是为了降低关系数据库的负载并减少网站成本 三、在Redis里面,被MULTI命令和EXEC命令包围的所有命令会...

BobwithB
43分钟前
4
0
MongoDB基础之入门

MongoDB基础之入门 一、MONGODB简介 MongoDB由C/C++开发,是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,例如:辅助索引、范围查询和排序。MongoDB还内置了...

星汉
45分钟前
7
0
c++ 神奇的赋值用法

c++ 神奇的赋值用法(第8章)

天王盖地虎626
今天
5
0
Jquery操作UI之设置字体大小

先获取字体大小,进行处理。再将修改的值保存。 slice() 方法可从已有的数组中返回选定的元素。 arrayObject.slice(start,end)。 start 必需。规定从何处开始选取。如果是负数,那么它规定从...

前端老手
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部