基于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 <role name>

    组分配角色:GRANT ROLE <role name> TO GROUP <group name>

    服务级赋权:GRANT <ALL|SELECT|UPDATE> ON SERVER <server name> TO ROLE <role name>

    数据库赋权:GRANT <ALL|SELECT|UPDATE> ON DATABASE <database name> TO ROLE <role name>

    表赋权:GRANT <ALL|SELECT|UPDATE> ON <database name>.<table name> TO ROLE <role name>

权限回收例子:

 回收数据库权限:REVOKE <ALL|SELECT|UPDATE> ON DATABASE <database name> FROM ROLE <role name>

查看某个角色的权限:SHOW GRANT ROLE <role name>

    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 配置设置进行定义) 属性,则使用以下形式创建用户可分辨名称模板:<login username>@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,不再赘述。

本文首发于公众号:data之道

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容