hive 权限管理

本文详细介绍了Hive的权限管理,包括元数据存储、SQL标准授权、元数据存储的三种方式(内嵌、本地、远程)以及配置步骤。重点讲解了HiveServer2中的SQL标准授权模式,强调了远程元存储的安全性和效率,并提供了自定义登录校验的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        hive做为table的存储层,spark sql,mapreduce, Presto 等等通过 Hive's HCatalog API 访问元数据信息, 进而访问hdfs数据, 此时要对hdfs访问做权限控制(hdfs 默认已经处理),元数据访问需要做权限控制。      hive sql 执行引擎, hive的一个非常普遍的用法,主要针对sql的用户和BI工具       

            (1)hive 客户端用户 (官方建议抛弃)     (2)ODBC/JDBC 和 HiveServer2 Api(Beeline CLI)               

           HiveServer2是一个服务,支持客户端不使用Hive脚本进行执行查询,HiveServer2继承了HiveServer1,HiveServer1已经过时!

            HiveServer2其实就是一个远程客户端执行查询的和检索的一个服务接口,目前是基于Thrift RPC实现的,是HiveServer的提高版本,支持多客户端并发查询和认证,它被提供是为了更好的开放客户端API,例如JDBC和ODBC(言外之意就是远程的hive client执行查询都需要连接到HiveServer2之上)       针对上面的用例hive官方提供三种权限控制: 基于元数据存储、 基于sql标准、 默认的hive授权。选中方案 HiveServer2中基于SQL标准的授权为主,包含Metastore Server中基于存储的授权(Metastore Server中基于存储的授权可选),先上图:

 

 

Metastore

Metastore组件:它是元数据服务组件,hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和hive服务进行交互的服务组件,默认情况下,metastore服务和hive服务是安装在一起的,运行在同一个进程当中。也可以把metastore服务从hive服务里剥离出来,metastore独立安装在一个集群里,hive远程调用metastore服务,这样就可以把元数据这一层放到防火墙之后,客户端访问hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的metastore服务,可以让metastore服务和hive服务运行在不同的进程里,这样也保证了hive的稳定性,提升了hive服务的效率。

 

Hive中metastore(元数据存储)的三种方式:

1)内嵌Derby方式(默认方案)   2)Local方式     3)Remote方式

 

Local方式

以本地Mysql数据库为例,配置文件 hive-site.xml 中jdbc URL、驱动、用户名、密码等属性值配置如下:

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://eagle80:3306/hive?createDatabaseIfNotExist=true</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

<description>Driver class name for a JDBC metastore</description>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

<description>username to use against metastore database</description>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>123456</value>

<description>password to use against metastore database</description>

</property>

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/user/hive/warehouse</value>

<description>location of default database for the warehouse</description>

</property>

ps:需要把mysql的驱动包copy到目录 <HIVE_HOME>/lib 中

如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema

配置完成之后启动元数据服务,然后使用hive进入shell进行交互式查询。

 

Remote方式

客户端配置都在一个 hive-site.xml 中,属性值配置如下:

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://eagle80:3306/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>123456</value>

</property>

<property>

<name>hive.metastore.schema.verification</name>

<value>false</value>

</property>

<property>

<name>hive.metastore.uris</name>

<value>thrift://eagle80:9083</value>

</property>

 

hive metastore 服务端启动命令:

hive --service metastore 启动元数据服务

 

三种部署方式区别总结:

  • 内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
  • 本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
  • 本地元存储和远程元存储的区别是:本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程元存储的metastore服务和hive运行在不同的进程里。

授权模式概述

 

1、旧的默认Hive授权(传统模式)

Hive旧默认授权(在Hive 2.0.0之前是默认授权)是早期版本的Hive中可用的授权模式。但是,此模式没有完整的访问控制模型,因此未解决许多安全漏洞。例如,未定义为用户授予权限所需的权限,并且任何用户都可以授予自己对表或数据库的访问权限。

此模型类似于基于SQL标准的授权模式,因为它提供基于grant / revoke语句的访问控制。但是,访问控制策略与基于SQL标准的授权不同,并且它们不兼容。

 

2、 Metastore Server中基于存储的授权

通过在Metastore Server中启用基于存储的授权, 会控制元数据对象(如数据库,表和分区)上的元数据访问,它会检查您是否拥有文件系统上相应目录的权限。

 

Metastore Server中基于存储的授权

<property>

<name>hive.security.metastore.authorization.manager</name>

<value>org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider</value>

</property>

<property>

<name>hive.security.metastore.authorization.auth.reads</name>

<value>true</value>

</property>

<property>

<name>hive.security.metastore.authenticator.manager</name>

<value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>

</property>

<property>

<name>hive.metastore.pre.event.listeners</name>

<value> org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener</value>

</property>

 

3、 HiveServer2中基于SQL标准的授权

尽管基于存储的授权可以在数据库,表和分区级别提供访问控制,但它无法控制更精细级别的授权,例如列和视图,因为文件系统提供的访问控制位于目录和文件级别。细粒度访问控制的先决条件是数据服务器,它只能提供用户需要访问的列和行。在文件系统访问的情况下,整个文件被提供给用户。HiveServer2满足这个条件,因为它有一个理解行和列的API(通过使用SQL),并且只能提供SQL查询所要求的列和行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值