LanguageManual Authorization

Hive Authorization

Introduction

请注意,本文档引用的是授权,它是在验证用户是否具有执行特定操作的权限,而不是在验证(验证用户身份)方面。通过使用 Kerberos 对Hive 命令行之类的工具进行了强身份验证。 HiveServer2用户还有其他身份验证选项。

配置单元授权选项

Hive 授权的三种模式可以满足不同的用例。

Use Cases

根据 Hive 的两个主要用例来考虑授权很有用。

  • Hive 作为表存储层。这是 Hive 的HCatalog API 用户(例如 Apache Pig,MapReduce 和一些大规模并行处理数据库(Cloudera Impala,Facebook Presto,Spark SQL 等))的用例。在这种情况下,Hive 为存储(通常为 HDFS)上的文件提供表抽象和元数据。这些用户可以直接访问 HDFS 和 metastore 服务器(该服务器提供用于元数据访问的 API)。通过使用HDFS permissions授权 HDFS 访问。元数据访问需要使用 Hive 配置进行授权。

  • Hive 作为 SQL 查询引擎。这是 Hive 最常见的用例之一。这是 SQL 用户和 BI 工具的“配置单元视图”。该用例具有以下两个子类别:

  • Hive 命令行个用户。这些用户可以直接访问 HDFS 和 Hive Metastore,这使该用例与用例 1 相似。

    • ODBC/JDBC 和其他 HiveServer2 API 用户(Beeline CLI 是示例)。这些用户具有通过 HiveServer2 进行的所有数据/元数据访问。他们没有直接访问 HDFS 或 metastore 的权限。

授权模式概述

1 Metastore Server 中基于存储的授权

在用例 1 和 2a 中,用户可以直接访问数据。配置单元配置不控制数据访问。 HDFS 权限充当表存储访问的真实来源之一。通过启用Metastore Server 中基于存储的授权,您可以将此单一来源用于真实情况,并具有一致的数据和元数据授权策略。要控制对元数据对象(如数据库,表和分区)的元数据访问,它将检查您是否对文件系统上的相应目录具有权限。您还可以通过确保查询以最终用户身份运行来保护通过 HiveServer2 的访问(上述用例 2b)(在 HiveServer2 配置中hive.server2.enable.doAs选项应为“ true” –这是默认值)。

请注意,通过使用HDFS ACL(在 Hadoop 2.4 及更高版本中可用),您在控制对文件系统的访问方面具有很大的灵 Active,从而通过基于存储的授权提供了更大的灵 Active。从 Hive 0.14(HIVE-7583)开始可用。

虽然依靠基于存储的授权来限制访问,但是您仍然需要启用下面列出的安全选项 2 或 3 之一,或使用 FallbackHiveAuthorizer 保护 HiveServer2 实例中的操作.

后备授权人

您需要使用 Hive 2.3.4 或 3.1.1 或更高版本才能使用回退授权器。

Admin needs to specify the following entries in
hiveserver2-site.xml:

<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
</property>
<property>
  <name>hive.security.authorization.manager</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory</value>
</property>

FallbackHiveAuthorizerFactory 将执行以下操作以缓解上述威胁:

  • 禁止在 sql 语句中的本地文件位置(Management 员除外)

  • 只允许“设置”选定的白名单参数

  • 禁止 dfs 命令(Management 员除外)

  • 禁止“ ADD JAR”语句

  • 禁止“ COMPILE”语句

  • 禁止使用“ TRANSFORM”语句

2 HiveServer2 中基于 SQL 标准的授权

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

基于 SQL 标准的授权(在 Hive 0.13.0 中引入,HIVE-5837)可用于启用细粒度的访问控制。它基于用于授权的 SQL 标准,并使用熟悉的 grant/revoke 语句来控制访问。需要通过 HiveServer2 配置启用它。

请注意,对于用例 2a(Hive 命令行),禁用了基于 SQL 标准的授权。这是因为使用 Hive 中的访问控制策略无法对 Hive 命令行进行安全访问控制,因为用户可以直接访问 HDFS,因此他们可以轻松绕过基于 SQL 标准的授权检查,甚至完全禁用它。禁用此功能可避免给用户带来错误的安全感。

3 使用 Apache Ranger 和 Sentry 的授权

Apache RangerApache Sentry是使用 hive 提供的插件进行授权的 apache 项目。

在这些项目下,将策略保留在存储库中。

您还可以使用它们获得许多高级功能。例如,使用 Ranger,您可以通过 Web 界面查看和 Management 策略,查看审核信息,具有基于运行时属性的动态行和列级别访问控制(包括列掩码)。

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

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

该模型类似于基于 SQL 标准的授权模式,因为它提供了基于授予/吊销语句的访问控制。但是,访问控制策略与基于 SQL 标准的授权不同,并且不兼容。 Hive 命令行用户也支持使用此模式。但是,由于在讨论基于 SQL 标准的授权(上文)中提到的原因,它不是 Hive 命令行的安全授权方式。

解决多个用例的授权需求

基于存储的授权提供了一种解决上述所有用例的简单方法。但是,如果您需要对 SQL 用户进行更细粒度的访问控制,则还可以在 HiveServer2 中启用基于 SQL 标准的授权模式。

也就是说,您可以为 Metastore API 调用(在 Hive Metastore 中)启用基于存储的授权,并同时在 HiveServer2 中启用基于 SQL 标准的授权。

Explain Authorization

Version 0.14 — EXPLAIN AUTHORIZATION

Hive 0.14.0开始,HiveQL 命令EXPLAIN AUTHORIZATION显示需要授权才能执行查询的所有实体,以及所有授权失败。

More Information

有关 Hive 授权模式的详细信息,请参阅: