Metastore Server 中基于存储的授权

带有基于存储授权的 metastore 服务器安全功能已添加到 Hive 版本 0.10 中。先前在HCatalog中引入了此功能。

Version 0.10.0

HIVE-3705在版本 0.10.0 中为 Hive 添加了 metastore 服务器安全性。

  • 有关 metastore 服务器中基于存储的授权的其他信息,请参见 HCatalog 文档基于存储的授权

  • 有关 Hive 授权模型和其他安全选项的概述,请参阅Authorization文档。

对 Metastore Server 安全性的需求

当多个 Client 端访问备用数据库(例如 MySQL)中的同一 metastore 时,数据库连接凭据可能在hive-site.xml配置文件中可见。即使基础数据受 HDFS 访问控制保护,恶意或不称职的用户也可能会严重破坏元数据。

同样,当 Hive Metastore 服务器使用 Thrift 与 Client 端进行通信并且具有用于元数据存储和持久性的后备数据库时,在 Client 端进行的身份验证和授权不能保证 Metastore 方面的安全性。为了提供元数据的安全性,Hive 版本 0.10 向元存储添加了授权功能。 (请参阅HIVE-3705。)

基于存储的授权

将 metastore 服务器安全性配置为使用基于存储的授权时,它将使用与不同元数据对象相对应的文件夹的文件系统许可权作为授权策略的真实来源。建议在 metastore 中使用基于存储的授权。

请参见 HCatalog 基于存储的授权文档中的详细信息。

从 Hive 0.14 开始,基于存储的授权授权对数据库和表的读取特权。 get_database api 调用需要数据库目录读取特权。取得表信息的get_table_*调用和列出表的分区的get_partition_*调用需要对表目录具有读取特权。默认情况下,它基于存储授权被启用。请参阅下一节有关配置的 hive.security.metastore.authorization.auth.reads。

Metastore 安全性的配置参数

要启用 Hive Metastore Server 安全性,请在hive-site.xml中设置以下参数:

  • hive.metastore.pre.event.listeners

设置为org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener

这将打开 Metastore 端的安全性。

  • hive.security.metastore.authorization.manager

设置为org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider

这告诉 Hive 使用哪个 metastore 端授权提供程序。默认设置使用DefaultHiveMetastoreAuthorizationProvider,它实现了标准的 Hive 授予/撤销模型。要使用基于 HDFS 权限的模型(推荐)进行授权,请按照上面的说明使用StorageBasedAuthorizationProvider

Versions 0.10.0 and 0.12.0

StorageBasedAuthorizationProvider是在 Hive 0.10.0 中引入的,仅在 metastore 端(HIVE-3705)运行。从 Hive 0.12.0 开始,它还运行在 Client 端(HIVE-5048HIVE-5402)。

  • hive.security.metastore.authenticator.manager

设置为org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator

  • hive.security.metastore.authorization.auth.reads
    设置为 true 时,Hive Metastore 授权还将检查读取访问。默认情况下将其设置为 true。读取授权检查是在Hive 0.14.0中引入的。

示例 hive-site.xml:默认设置

下面的代码段显示了hive-site.xml中处于默认状态的密钥(元 Store 端安全性已设置为使用默认授权/身份验证,但已禁用)。请编辑上面的信息以获得所需的授权行为:

<property>
  <name>hive.security.metastore.authorization.manager</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider</value>
  <description>authorization manager class name to be used in the metastore for authorization.
  The user defined authorization class should implement interface
  org.apache.hadoop.hive.ql.security.authorization.HiveMetastoreAuthorizationProvider.
  </description>
 </property>

<property>
  <name>hive.security.metastore.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>
  <description>authenticator manager class name to be used in the metastore for authentication.
  The user defined authenticator should implement interface 
  org.apache.hadoop.hive.ql.security.HiveAuthenticationProvider.
  </description>
</property>

<property>
  <name>hive.metastore.pre.event.listeners</name>
  <value> </value>
  <description>pre-event listener classes to be loaded on the metastore side to run code
  whenever databases, tables, and partitions are created, altered, or dropped.
  Set to org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener
  if metastore-side authorization is desired.
  </description>
</property>