基于存储的授权

Hive 的默认授权模型

Hive 的默认授权模型支持基于用户,组和角色的传统 RDBMS 授权样式,并授予他们对数据库或表进行操作的权限。在Hive AuthorizationHive 不推荐使用的授权模式/旧版模式中有更详细的描述。

由于实现方面存在以下差异,因此这种 RDBMS 授权样式不太适合 Hadoop 中的典型用例:

  • 与传统的 RDBMS 不同,Hive 不能完全控制其下的所有数据。数据存储在许多文件中,并且文件系统具有独立的授权系统。

  • 与传统的 RDBMS 不允许其他程序直接访问数据不同,人们倾向于使用其他应用程序直接读取或写入 Hive 使用的文件或目录中。

这会产生一些问题场景,例如:

  • 您向用户授予权限,但是该用户无法访问数据库或文件系统,因为它们没有文件系统权限。

  • 您删除了用户权限,但是该用户仍具有文件系统权限,因此仍可以直接通过文件系统访问数据。

基于存储系统的授权模型

Hive 社区意识到可能没有一种“一刀切”的授权模型,因此它支持插入其他授权模型。

在 HCatalog 软件包中,我们引入了一个授权接口的实现,该接口使用基础文件系统(或通常是存储后端)的权限作为对每个数据库,表或分区的权限的基础。

Note

从版本 0.10.0 开始,此功能在 metastore 端的 Hive 中也可用(请参阅 Hive 文档中的Metastore Server 中基于存储的授权)。从 Hive 0.12.0 开始,它还运行在 Client 端(HIVE-5048HIVE-5402)。

在 Hive 中,当使用文件系统进行存储时,存在与数据库或表相对应的目录。使用此授权模型,用户或组对此目录具有的读/写权限将确定用户对数据库或表的权限。对于其他存储系统(例如 HBase),将使用系统的授权机制确定 Hive 中的权限来完成系统中等效实体的授权。

例如,alter table 操作将在允许操作之前检查用户是否对表目录具有权限,即使它可能不会更改文件系统上的任何内容。

用户将需要对存储系统上相应实体的写访问权,以执行任何可以修改数据库或表状态的操作。用户需要读取权限才能对数据库或表执行任何非修改操作。

当数据库或表由具有 Unix/POSIX 样式权限模型(例如 HDFS)的文件系统支持时,可以为所有者用户,组和“其他”设置读(r)和写(w)权限。 '。

HDFS 权限的详细信息位于ht tp://hadoop.apache.org/docs/r * x.x.x * /hdfs_permissions_guide.html,例如:

注意: 在 Hive 的发行版本中不提供对HDFS ACL(在 Apache Hadoop 2.4 中引入)的支持。这意味着,它仅检查传统的 rwx 样式权限,以确定用户是否可以写入文件系统。 Hive 主干HIVE-7583中提供了对 ACL 的支持,而 Hive 0.14 中将提供对 ACL 的支持。

可以在以下位置找到指向 Hadoop 不同版本的文档的链接:http://hadoop.apache.org/docs/

注意 :如果启用hive.warehouse.subdir.inherit.perms,将通过以下permission inheritance规则设置 Hive 创建的文件和目录的权限和 ACL。

Hive 将使用文件系统的逻辑来确定用户是否对目录或文件具有权限。

Minimum Permissions

下表显示了此授权模型下 Hive 操作所需的最低权限:

Operation数据库读取访问数据库写访问表读取访问表写访问
LOADX
EXPORTX
IMPORTX
CREATE TABLEX
创建表作为选择XX

source table
DROP TABLEX
SELECTX
ALTER TABLEX
SHOW TABLESX

警告: Hive 当前对该授权模型的实现并不能阻止恶意用户做坏事。请参阅下面的Known Issues部分。

未使用的 DDL 权限

ManagementHive 的默认授权模型的权限的 DDL 语句对基于存储的模型中的权限没有任何影响。

Caution

用户,组和角色的所有 GRANT 和 REVOKE 语句都将被忽略。请参阅下面的Known Issues部分。

配置基于存储系统的授权

可通过 Hive 的一部分称为 StorageBasedAuthorizationProvider 的授权提供程序来实现基于文件系统的授权模型。 (对此的支持已添加到版本 0.10.0 的 Hive 程序包中–参见HIVE-3705Metastore Server 中基于存储的授权。)

Version

HCatalog 程序包中曾经存在一个称为 HdfsAuthorizationProvider 的较早实现,但是此后从 Hive 0.14 主干开始已弃用并删除了该实现。如果您的配置指示使用 HdfsAuthorizationProvider,请改为更新到此配置。

需要将以下条目添加到hive-site.xml以启用授权:

<property>
    <name>hive.security.authorization.enabled</name>
    <value>true</value>
    <description>enable or disable the hive client authorization</description>
  </property>

  <property>
    <name>hive.security.authorization.manager</name>
    <value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value>
    <description>the hive client authorization manager class name.
    The user defined authorization class should implement interface
    org.apache.hadoop.hive.ql.security.authorization.HiveAuthorizationProvider.
    </description>
  </property>

要禁用授权,请将hive.security.authorization.enabled设置为 false。要使用 Hive 的默认授权模型,请不要设置hive.security.authorization.manager属性。

创建新表或数据库

要创建具有适当权限的新表或数据库,可以使用 Hive 命令行创建表/数据库,然后使用文件系统操作修改权限,也可以使用 HCatalog 命令行(hcat)创建数据库/表。 。

HCatalog 命令行工具使用与 Hive 相同的语法,并将创建表或数据库,并由创建该表或数据库的用户拥有相应的目录,以及一个与“ -g”参数和“ -p”中指定的权限相对应的组。 ”的论点。

Known Issues

  • 一些元数据操作(大多数是读取操作)不检查授权。参见https://issues.apache.org/jira/browse/HIVE-3009

  • Hive 的当前实现在 Client 端中执行授权检查。这意味着恶意用户可以规避这些检查。

  • 还需要使用其他授权提供程序(StorageDelegationAuthorizationProvider)来处理 HBase 表。但这还没有得到很好的测试。

  • Hive 查询添加的分区文件和目录不会继承表的权限。这意味着即使您为组授予了访问表的权限,如果集群的默认 umask 如此配置,新分区也将仅对所有者具有读取权限。参见https://issues.apache.org/jira/browse/HIVE-3094。修改权限将需要单独的“ hdfs chmod”命令。

  • 尽管用于 Management 权限的 DDL 语句在基于存储的授权中无效,但是当前它们不返回错误消息。参见https://issues.apache.org/jira/browse/HIVE-3010

Navigation Links

Previous: Notification

配置单元:AuthorizationMetastore Server 中基于存储的授权

一般:HCatalog ManualWebHCat ManualHive Wiki 主页Hive 项目 site