Hive权限控制:集成Sentry 和 Hue

作者: b91cbec6a902 | 来源:发表于2019-04-14 19:21 被阅读13次

    概述

    基于Hive 1.2.1、Sentry 1.5.1

    Hive没有实现权限控制的功能,但提供了权限控制的接口。而Sentry实现了Hive提供的权限控制接口,这就是两者结合的关键点。
    Hive操作被Sentry插件拦截后,Sentry插件带上用户信息和操作信息通过RPC访问Sentry Server,由Sentry Server来判断是否具有操作权限。

    Hive + Sentry

    Sentry配置

    1、配置sentry-site.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <property>
            <name>sentry.service.security.mode</name>
            <value>none</value>
        </property>
        <property>
            <name>sentry.service.admin.group</name>
            <value>hue,hive</value>
        </property>
        <property>
            <name>sentry.service.allow.connect</name>
            <value>impala,hive,hue</value>
        </property>
    
        <!-- 指定Sentry Server的访问地址 -->
        <property>
            <name>sentry.service.client.server.rpc-address</name>
            <value>localhost</value>
        </property>
        <property>
            <name>sentry.service.client.server.rpc-port</name>
            <value>8038</value>
        </property>
        
        <!-- 这里使用MySQL存储Sentry的数据 -->
        <property>
            <name>sentry.store.jdbc.url</name>
            <value>jdbc:mysql://localhost/sentry?characterEncoding=UTF-8</value>
        </property>
        <property>
            <name>sentry.store.jdbc.driver</name>
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
            <name>sentry.store.jdbc.user</name>
            <value>root</value>
        </property>
        <property>
            <name>sentry.store.jdbc.password</name>
            <value>123456</value>
        </property>
        <property>
            <name>sentry.service.web.enable</name>
            <value>true</value>
        </property>
        <property>
            <name>sentry.service.web.port</name>
            <value>51000</value>
        </property>
        <property>
            <name>sentry.service.web.authentication.type</name>
            <value>NONE</value>
        </property>
        <property>
            <name>sentry.hive.server</name>
            <value>server1</value>
        </property>
        <property>
            <name>hive.sentry.provider</name>
            <value>org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider</value>
        </property>
    
        <!-- Hive 结合Sentry使用 -->
        <property>
            <name>sentry.hive.testing.mode</name>
            <value>true</value>
        </property>
    </configuration>
    

    2、启动Sentry。

    Hive配置

    1、hive-site.xml 新增以下配置

    <!-- Sentry实现的Metastore访问拦截插件 -->
    <property>
      <name>hive.metastore.event.listeners</name>
      <value>org.apache.sentry.binding.metastore.SentryMetastorePostEventListener</value>
    </property>
    <property>
      <name>hive.metastore.pre.event.listeners</name>
      <value>org.apache.sentry.binding.metastore.MetastoreAuthzBinding</value>
    </property>
    <property>
      <name>hive.metastore.filter.hook</name>
      <value>org.apache.sentry.binding.metastore.SentryMetaStoreFilterHook</value>
    </property>
    
    <!-- Sentry插件需要的配置信息,主要包括Sentry Server的地址 -->
    <property>
      <name>hive.sentry.conf.url</name>
      <value>file:///etc/hive/conf/hive-sentry.xml</value>
    </property>
    
    <!-- 通过Hive CURD权限的插件 -->
    <property>
      <name>hive.server2.session.hook</name>
      <value>org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook</value>
    </property>
    <property>
       <name>hive.security.authorization.task.factory</name>
       <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
    </property>
    <property>
        <name>hive.server2.enable.impersonation</name>
        <value>false</value>
    </property>
    

    2、新增hive-sentry.xml文件,并跟hive-site.xml放在同一目录下。

    这个文件主要配置的是Sentry Server的访问地址,集成在Hive里面的Sentry插件需要这些信息。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <property>
        <name>sentry.service.security.mode</name>
        <value>none</value>
      </property>
      <property>
        <name>sentry.service.client.server.rpc-address</name>
        <value>localhost</value>
      </property>
      <property>
        <name>sentry.service.client.server.rpc-port</name>
        <value>8038</value>
      </property>
      <property>
        <name>sentry.service.client.server.rpc-connection-timeout</name>
        <value>200000</value>
      </property>
      <property>
        <name>sentry.metastore.service.users</name>
        <value>hive</value>
      </property>
      <property>
        <name>sentry.hive.provider</name>
      <value>org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider</value>
      </property>
      <property>
        <name>sentry.hive.server</name>
        <value>server1</value>
      </property>
      <property>
        <name>sentry.hive.testing.mode</name>
        <value>true</value>
      </property>
      <property>
        <name>sentry.hive.provider.backend</name>
        <value>org.apache.sentry.provider.db.SimpleDBProviderBackend</value>
      </property>
      <property>
        <name>sentry.hive.testing.mode</name>
        <value>true</value>
      </property>
    </configuration>
    

    这里文件的名称可自定义,文件的位置也可以自定义,只要与hive-site.xml里的以下配置对应上即可。

    <!-- Sentry插件需要的配置信息,主要包括Sentry Server的地址 -->
    <property>
      <name>hive.sentry.conf.url</name>
      <value>file:///etc/hive/conf/hive-sentry.xml</value>
    </property>
    

    3、将Sentry插件包拷贝至Hive的lib目录下。

    Sentry插件包在Sentry的lib目录下可以找到,sentrry-binding-hive-xxxx.jar的那个就是。


    image.png

    4、重启Hive-Server和Hive-Metastore。

    注意:Hive的权限控制只对Beeline和JDBC方式有效,对Hive Cli方式无效。因此我们需要限制使用Hive Cli连接方式。

    通过Hive中管理权限

    root@xxxx (18:59:37) ~ # beeline -u jdbc:hive2://localhost:10000 -n hive -p hive
    scan complete in 3ms
    Connecting to jdbc:hive2://localhost:10000
    Connected to: Apache Hive (version 1.1.0-cdh5.12.1)
    Driver: Hive JDBC (version 1.1.0-cdh5.12.1)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    Beeline version 1.1.0-cdh5.12.1 by Apache Hive
    0: jdbc:hive2://localhost:10000> show roles;
    INFO  : Compiling command(queryId=hive_20190414185959_e3dc7f9e-db8d-4595-90fe-f997bdb35f50): show roles
    INFO  : Semantic Analysis Completed
    INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:role, type:string, comment:from deserializer)], properties:null)
    INFO  : Completed compiling command(queryId=hive_20190414185959_e3dc7f9e-db8d-4595-90fe-f997bdb35f50); Time taken: 0.118 seconds
    INFO  : Concurrency mode is disabled, not creating a lock manager
    INFO  : Executing command(queryId=hive_20190414185959_e3dc7f9e-db8d-4595-90fe-f997bdb35f50): show roles
    INFO  : Starting task [Stage-0:DDL] in serial mode
    INFO  : Completed executing command(queryId=hive_20190414185959_e3dc7f9e-db8d-4595-90fe-f997bdb35f50); Time taken: 0.149 seconds
    INFO  : OK
    +-------------+--+
    |    role     |
    +-------------+--+
    | admin_role  |
    | bi_role     |
    +-------------+--+
    2 rows selected (0.362 seconds)
    0: jdbc:hive2://localhost:10000>
    

    常用命令如下:
    CREATE ROLE role_name :创建角色
    DROP ROLE role_name :删除角色
    GRANT ROLE role_test1 TO USER abc :把role_test1角色授权给abc用户
    SHOW ROLE GRANT USER abc:查看abc用户被授权的角色

    注意:这里的用户是在Linux系统中也存在。

    通过Hue中管理权限

    1、hue.ini修改如下配置。

    ###########################################################################
    # Settings for the Sentry lib
    ###########################################################################
    
    [libsentry]
      # Sentry服务地址
      hostname=localhost
    
      # Sentry服务端口号
      port=8038
    
      # Sentry的配置文件位置
      sentry_conf_dir=/etc/sentry/conf
    
      # Number of seconds when the privilege list of a user is cached.
      ## privilege_checker_caching=30
    

    2、重启Hue,并使用Hue的管理员用户进行登录,进行权限配置。


    Hue权限管理页面
    角色权限管理

    注意:在Hue涉及到以下几个概念:
    ①Role角色:权限的集合。
    ②Group用户组:角色是赋予给用户组的。这个用户组在Linux系统里要存在。
    ③User用户:用户归属于用户组。这个用户在Linux系统里要存在。

    相关文章

      网友评论

        本文标题:Hive权限控制:集成Sentry 和 Hue

        本文链接:https://www.haomeiwen.com/subject/jozziqtx.html