在cdh中配置和使用sentry服务

来源:互联网 发布:球球大作战最新源码 编辑:程序博客网 时间:2024/05/20 21:47

在cdh中配置和使用sentry服务

  • 在cdh中配置和使用sentry服务
  • 在beeline中使用sentry
    • 附练习中用到的数据,数据库和表
  • Hive SQL Syntax for Use with Sentry
    • 创建和删除角色
    • 角色的授权和撤销
    • 权限的授予和撤销
    • 查看角色/组权限

Apache Sentry 是Cloudera公司发布的一个Hadoop开源组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式。Sentry当前可以和Hive/Hcatalog、Apache Solr 和Cloudera Impala集成,提供权限管理,保护数据安全。

了解更多sentry,请浏览 http://blog.javachen.com/2015/04/29/apache-sentry-architecture.html

在cdh中提供了比较方便快捷的sentry配置服务。

首先在cdh中添加sentry服务

安装完成后,需要在cdh中进行相关配置:

  • 在Hue的配置中找到sentry服务项,选择snetry。

  • 在Hive配置中找到Impersonation项,取消下面选项。

  • 在sentry-site.xml 的 Hive 服务高级配置代码段
    sudo vim /opt/cloudera/parcels/CDH/etc/sentry/conf.dist/sentry-site.xml

添加内容

    </property>        <name>sentry.hive.testing.mode</name>        <value>true</value>    <property>

保存退出。

  • 在cdh中sentry服务进行配置,找到配置中的*管理员组*项和*允许的连接用户*项,添加root用户。

  • 登陆hue,发现多出一个Security选项,可以通过Sentry表来管理,选项下面直接管理hive表。

  • 用户管理界面下,添加root用户和root组,作为超级管理员,提供授权等功能
  • 通过root登陆hue,在用户管理员下添加test1用户、test1用户组,并在Security下给test1组授权

  • 在安装HiveServer2的机器上添加相应的
    groupadd test1 && useradd -g test1 test1
  • root用户登录hue, 在security项选择roles,创建test1_role

  • 然后登陆test1用户,查看信息。

我们发现,test1用户只能够对default数据库中的表进行操作。

 编辑

在beeline中使用sentry

首先使用beeline登录hive,使用hive用户.

beeline> !connect jdbc:hive2://kafka003:10000 hive hive0: jdbc:hive2://kafka003:10000> show roles;INFO  : OK+---------------+--+|     role      |+---------------+--+| admin_role    || analyst_role  || test1_role    |+---------------+--+0: jdbc:hive2://kafka003:10000> SHOW GRANT ROLE test1_role;INFO  : OK+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+-------------------+----------+--+| database  | table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |    grant_time     | grantor  |+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+-------------------+----------+--+| default   |        |            |         | test1_role      | ROLE            | all        | false         | 1504146822564000  | --       |+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+-------------------+----------+--+1 row selected (0.101 seconds)0: jdbc:hive2://kafka003:10000> SHOW GRANT ROLE admin_role;INFO  : OK+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+-------------------+----------+--+| database  | table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |    grant_time     | grantor  |+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+-------------------+----------+--+| *         |        |            |         | admin_role      | ROLE            | *          | false         | 1504082920034000  | --       || *         |        |            |         | admin_role      | ROLE            | *          | false         | 1504061331385000  | --       |+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+-------------------+----------+--+2 rows selected (0.093 seconds)0: jdbc:hive2://kafka003:10000> use filtered;INFO  : OKNo rows affected (0.123 seconds)0: jdbc:hive2://kafka003:10000> show tables;INFO  : OK+----------------+--+|    tab_name    |+----------------+--+| events         || events_usonly  |+----------------+--+2 rows selected (0.184 seconds)0: jdbc:hive2://kafka003:10000> select * from events_usonly;INFO  : OK+-------------------+------------------------+-----------------------+-----------------------+--+| events_usonly.ip  | events_usonly.country  | events_usonly.client  | events_usonly.action  |+-------------------+------------------------+-----------------------+-----------------------+--+| 10.1.2.3          | US                     | android               | createNote            || 10.1.2.3          | US                     | android               | updateNote            || 10.1.4.5          | US                     | windows               | updateTag             |+-------------------+------------------------+-----------------------+-----------------------+--+3 rows selected (30.115 seconds)

可以看到,hive用户可以对filtered数据库进行操作。

退出beeline,以test1重新用beeline登录到hive中

beeline> !connect jdbc:hive2://kafka003:10000 test1 test1

在hive中查询数据库并操作

0: jdbc:hive2://kafka003:10000> show databases;INFO  : OK+----------------+--+| database_name  |+----------------+--+| default        |+----------------+--+0: jdbc:hive2://kafka003:10000> show tables;INFO  : OK+-----------+--+| tab_name  |+-----------+--+| events    |+-----------+--+1 row selected (0.191 seconds)0: jdbc:hive2://kafka003:10000> select * from events;INFO  : OK+---------------+-----------------+----------------+----------------+--+|   events.ip   | events.country  | events.client  | events.action  |+---------------+-----------------+----------------+----------------+--+| 10.1.2.3      | US              | android        | createNote     || 10.200.88.99  | FR              | windows        | updateNote     || 10.1.2.3      | US              | android        | updateNote     || 10.200.88.77  | FR              | ios            | createNote     || 10.1.4.5      | US              | windows        | updateTag      |+---------------+-----------------+----------------+----------------+--+5 rows selected (0.265 seconds)

发现test1用户只能对default数据库进行操作。

 编辑

附练习中用到的数据,数据库和表

$ cat /tmp/events.csv10.1.2.3,US,android,createNote10.200.88.99,FR,windows,updateNote10.1.2.3,US,android,updateNote10.200.88.77,FR,ios,createNote10.1.4.5,US,windows,updateTagcreate table default.events (    ip STRING, country STRING, client STRING, action STRING  ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';load data local inpath '/tmp/events.csv' overwrite into table default.events;create database filtered;create view filtered.events as select country, client, action from default.events;create view filtered.events_usonly as select * from filtered.events where country = 'US';
 编辑

Hive SQL Syntax for Use with Sentry

 编辑

创建和删除角色

1. 创建角色: create role ROLE_NAME
2. 删除角色: droop role ROLE_NAME

例如如下语句:

CREATE ROLE admin_role;       创建角色admin_roledroop role  admin_role;       删除角色admin_role
 编辑

角色的授权和撤销

角色的授权(GRANT)就是给角色授予创建表、查询表等操作,撤销(REVOKE)反之。语法如下:

       GRANT ROLE role_name [, role_name] TO GROUP <groupName> [,GROUP <groupName>]       REVOKE ROLE role_name [, role_name] FROM GROUP <groupName> [,GROUP <groupName>]       GRANT ROLE admin_role TO GROUP `admin`;       GRANT ROLE admin_role TO GROUP hive;       授权给 admin 和 hive 组(对应操作系统上的组)       把role_test1角色授权给test组: grant role role_test1 to group test       查看test组被授权的角色: show role grant group test       取消test组的role_test1角色: revoke role role_test1 from group test       REVOKE ROLE admin_role from group hive;       撤销hive的admin_role权限
 编辑

权限的授予和撤销

        GRANT <PRIVILEGE> [, <PRIVILEGE> ] ON <OBJECT> <object_name> TO ROLE <roleName> [,ROLE <roleName>]        REVOKE <PRIVILEGE> [, <PRIVILEGE> ] ON <OBJECT> <object_name> FROM ROLE <roleName> [,ROLE <roleName>]        GRANT ALL ON DATABASE analyst1 TO ROLE analyst_role;        GRANT ALL ON DATABASE jranalyst1 TO ROLE analyst_role;        GRANT SELECT ON DATABASE jranalyst1 TO ROLE analyst_role;         将数据库analyst1,jranalyst1 的所有权限给analyst_role角色        analyst_role角色只能读写analyst1,jranalyst1 数据库。
 编辑

查看角色/组权限

      SHOW ROLES;                                            查看有多少个role      SHOW CURRENT ROLES;                                    查看当前登录的是用户属于哪个role      SHOW ROLE GRANT GROUP <groupName>;                     查看group所属的role      SHOW GRANT ROLE <roleName>;                            查看role所拥有的权限

用户可以通过*HiveServer2 SQL命令行(JDBC)*,*Beeline客户端*使用设置。Sentry只允许用户通过这两种方式来对hive中的数据进行访问。 Sentry并不推荐使用Hive客户端的方式访问数据。

在beeline里设置的role是可以同步到hue中的role,但是group, user均不能同步,所以如果需要设置的话在hue和linux系统中均要设置group和user。

例子:

• Grant privileges to analyst_role:1    CREATE ROLE analyst_role;2    GRANT ALL ON DATABASE analyst1 TO ROLE analyst_role;                                            analust_role拥有对数据库analyst1的所有权限3    GRANT SELECT ON DATABASE jranalyst1 TO ROLE analyst_role;                                       analyst_role只拥有对数据库jranalyst1的查询操作权限4    GRANT ALL ON URI 'hdfs://ha-nn-uri/landing/analyst1' TO ROLE analyst_role; • Grant privileges to junior_analyst_role:1    CREATE ROLE junior_analyst_role;2    GRANT ALL ON DATABASE jranalyst1 TO ROLE junior_analyst_role;                                  junior_analust_role拥有对数据库jranalyst1的所有权限3    GRANT ALL ON URI 'hdfs://ha-nn-uri/landing/jranalyst1' TO ROLE junior_analyst_role;• Grant privileges to admin_role:1    CREATE ROLE admin_role2    GRANT ALL ON SERVER server TO ROLE admin_role;                                                  将服务器server1上的所有权限给admin_role角色      GRANT all on DATABASE test to role admin_role with grant option;• Grant roles to groups:1    GRANT ROLE admin_role TO GROUP admin;                                                           admin用户组将拥有角色admin_role的权限  2    GRANT ROLE analyst_role TO GROUP analyst;3    GRANT ROLE jranalyst_role TO GROUP jranalyst;