首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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/20181119G0AYOC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券