On this page
Hive 中的权限继承
本文档介绍了如何确定代表 Hive 数据的文件的属性(权限,组,扩展 ACL)。
HDFS Background
- 创建文件或目录时,其所有者是 Client 端进程的用户身份,并且其组是从父级继承的(BSD 规则)。权限来自默认的 umask。除非明确设置,否则扩展 Acl 取自父级。
Goals
为了减少每次操作后设置细粒度文件安全性道具的需求,用户可能希望以下 Hive 仓库文件/目录从其目录父级自动继承安全性属性:
由新数据库/表/分区/存储桶创建的目录
通过加载/插入将文件添加到表中
表目录已导出/导入(关于从新父目录继承彼尔姆的导出表是否需要另一个标志的未解决问题)
继承了什么:
基本文件权限
组(已由 HDFS 为新目录完成)
扩展的 ACL(已由 HDFS 为新目录完成)
Note
扩展 ACL 的继承是原义的,所有扩展 ACL 均按原样复制到子级,包括 defaultGroup 的 ACL。
一个改进的余地可能是遵循 defaultGroup 的 HDFS 语义,如下所示:
“创建新文件或子目录时,它将自动将其父级的默认 ACL 复制到其自己的访问 ACL 中。一个新的子目录还将其复制到其自己的默认 ACL 中。这样,默认 ACL 将为创建新的子目录后,通过文件系统树的任意深层次向下复制。” (https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html#ACLs_Access_Control_Lists)
See HIVE-11481.
Behavior
在 Hive 中启用“ hive.warehouse.subdir.inherit.perms”标志时,Hive 将尝试执行以下所有继承。
数据库目录从仓库目录继承。
表目录从数据库目录继承,或者从仓库目录继承(如果它是默认数据库的一部分)。
外部表目录从父目录继承。
分区目录从表目录继承。 (截至Hive 1.1.0。)
数据文件从表或分区目录继承。
Hive 无法继承不会导致操作失败。何时将进行安全性继承的经验法则如下:
要运行 chmod,用户必须是文件的所有者,否则必须是超级用户。
要运行 chgrp,用户必须是文件的所有者,或者是超级用户。
因此,以 hive 身份运行的用户(在模拟时为“ hive”或已登录用户)必须是其安全属性将被更改的文件的超级用户或所有者。
Version Information
自 Hive 0.14 起,大多数功能已添加。
有关详细信息,请参见伞 JIRA HIVE-6892。
hive.warehouse.subdir.inherit.perms已在 Hive 3.0.0 中删除。 Hive 中不再需要此功能,因为传统的权限模型已被 Ranger 和 Sentry 等外部安全系统所取代。如果用户不想使用外部安全系统,则可以选择 Hive 附带的 SQLStdAuth。