Sentry初识sql
Sentry是适用于Hadoop生态环境、基于角色的受权管理系统,能够模块化集成到HDFS、Hive、Impala。它是一个策略引擎,运行定义受权规则,以校验用户对数据模型的访问请求。数据库
受权粒度安全
Sentry数据访问受权的实现依赖于受权对象和操做,受权对象定义要受受权规则约束的对象,能够是服务器(server)、数据库、表、视图甚至是列;操做定义运行的操做粒度,包括查找(select)、删除(delete)、建立(create)等。受权对象和操做级别的组合模式提供了不一样特权级别的访问控制。服务器
在某些场景下,管理员可使用视图的方式限制对行或列的访问,能必定程度上减小权限设置的工做量。并发
Roledom
角色是一个权限集合,定义受权规则的基本单位。角色的概念容许将多个受权规则集合到一块儿,而后再把权限相同的用户分到一个角色里,很方便后续权限管理维护。好比不一样业务的人员访问不一样的业务表,能够建多个角色,再给角色赋予相对应的业务表访问权限,若是这类用户要修改权限,只需对角色进行权限更改。模块化
Groupoop
组是一个用户集合,默认状况下Sentry使用Hadoop中配置的组映射机制(好比使用OS的用户组),Sentry使用Hadoop配置的组映射机制,以确保Sentry看到组映射和Hadoop生态系统中其余组件看到的相同。把一个Group加到多个Role里,这样就给用户分配到了权限,能够将多个用户分到一个组里。组的概念进一步下降了权限管理的复杂度。测试
受权通常操做加密
一、建立角色
二、给角色赋权限
三、用户所属组加入到受权实体(角色)
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中独立管理用户信息。
下面演示集成步骤:
一、身份验选择证LDAP,启用ldap身份验证
二、并配置LDAP Server url。ldaps://开头的url对用户名、密码以加密形式传输,ldap://是以明文形式传输
三、配置搜索绑定机制,设置search_bind_authentication以启用搜索绑定;
查找用户和组的搜索库的专有名称经过base_dn配置设置进行定义。
还有一种是使用直接绑定机制,使用直接绑定时,必须使用精确的nt_domain 或ldap_username_pattern进行身份验证。使用直接绑定时,若是定义了 nt 域 (经过 nt_domain 配置设置进行定义) 属性,则使用如下形式建立用户可分辨名称模板:@nt_domain。此模板用于从基本可分辨名称开始,搜索全部目录子树。若是未配置 nt 域,则 Hue 搜索用户的精确可分辨名称模式 (经过 ldap_username_pattern 配置设置进行定义)。在这种状况下,服务器从基本可分辨名称开始,在全部目录子树中搜索匹配 ldap_username_pattern 值。
通常首选方法是搜索绑定,本文也是按照搜索绑定作的。
四、LDAP身份验证首先绑定到服务器并创建链接。随后,创建的链接用于任何后续查询以搜索LDAP用户信息。配置绑定到ldap服务的信息,bind_dn:定义绑定可分辨名称 (或 DN) ;bind_password:配置设置绑定密码
Sentry环境测试
1、Hive
JDBC访问带Sentry环境的Hive,测试不一样用户对hive数据的访问权限,实现见下:
若是用户没有访问权限,会报异常:
2、Impala
JDBC访问带Sentry环境的impala,须要注意的是链接的url,设置成AuthMech=3。
3、Spark SQL查询Hive
hive引擎使用hadoop的mapReducer引擎作文件解析和查询,spark使用的是本身的sql引擎作的解析,把每一个数据库表当成一个RDD,直接操做底层HDFS。因此对于没有集成Sentry的HDFS来讲,实现代码没有任何差异。
4、Hive查Hbase
Hive提供了与HBase的集成,使得可以在HBase表上使用HQL语句进行查询 插入操做以及进行Join和Union等复杂查询。sentry一样也能对hive查hbase的表进行权限设置,测试代码同hive,再也不赘述。