基于存储的授权
Hive 的默认授权模型
Hive 的默认授权模型支持基于用户,组和角色的传统 RDBMS 授权样式,并授予他们对数据库或表进行操作的权限。在Hive Authorization和Hive 不推荐使用的授权模式/旧版模式中有更详细的描述。
由于实现方面存在以下差异,因此这种 RDBMS 授权样式不太适合 Hadoop 中的典型用例:
-
与传统的 RDBMS 不同,Hive 不能完全控制其下的所有数据。数据存储在许多文件中,并且文件系统具有独立的授权系统。
-
与传统的 RDBMS 不允许其他程序直接访问数据不同,人们倾向于使用其他应用程序直接读取或写入 Hive 使用的文件或目录中。
这会产生一些问题场景,例如:
-
您向用户授予权限,但是该用户无法访问数据库或文件系统,因为它们没有文件系统权限。
-
您删除了用户权限,但是该用户仍具有文件系统权限,因此仍可以直接通过文件系统访问数据。
基于存储系统的授权模型
Hive 社区意识到可能没有一种“一刀切”的授权模型,因此它支持插入其他授权模型。
在 HCatalog 软件包中,我们引入了一个授权接口的实现,该接口使用基础文件系统(或通常是存储后端)的权限作为对每个数据库,表或分区的权限的基础。
Note
从版本 0.10.0 开始,此功能在 metastore 端的 Hive 中也可用(请参阅 Hive 文档中的Metastore Server 中基于存储的授权)。从 Hive 0.12.0 开始,它还运行在 Client 端(HIVE-5048和HIVE-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 | 数据库读取访问 | 数据库写访问 | 表读取访问 | 表写访问 |
---|---|---|---|---|
LOAD | X | |||
EXPORT | X | |||
IMPORT | X | |||
CREATE TABLE | X | |||
创建表作为选择 | X | X | ||
source table | ||||
DROP TABLE | X | |||
SELECT | X | |||
ALTER TABLE | X | |||
SHOW TABLES | X |
警告: Hive 当前对该授权模型的实现并不能阻止恶意用户做坏事。请参阅下面的Known Issues部分。
未使用的 DDL 权限
ManagementHive 的默认授权模型的权限的 DDL 语句对基于存储的模型中的权限没有任何影响。
Caution
用户,组和角色的所有 GRANT 和 REVOKE 语句都将被忽略。请参阅下面的Known Issues部分。
配置基于存储系统的授权
可通过 Hive 的一部分称为 StorageBasedAuthorizationProvider 的授权提供程序来实现基于文件系统的授权模型。 (对此的支持已添加到版本 0.10.0 的 Hive 程序包中–参见HIVE-3705和Metastore 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
配置单元:Authorization和Metastore Server 中基于存储的授权
一般:HCatalog Manual – WebHCat Manual – Hive Wiki 主页 – Hive 项目 site