我正在尝试使用基于存储的安全性来保护 Hive。我正在使用 Kerberos 和 LDAP。
我想要的是让 Hive 以用户(及其主要组)的身份在 HDFS 中创建目录和文件。这样,我希望根据组成员身份限制对数据库的访问。
因此,例如当我使用 kinit(import@REALM)通过 Kerberos 以用户“import”(在“imports”组中)进行身份验证并运行 beeline“CREATE DATABASE test;”时,我希望看到:
drwxr-x--- - import imports 0 2015-08-28 10:16 /user/hive/warehouse/test.db
但我得到的是:
drwxr-x--- - hive data 0 2015-08-28 10:16 /user/hive/warehouse/test.db
注意仓库目录权限为:
drwxrwxr-t - hive data 0 2015-08-28 11:14 /user/hive/warehouse
我还注意到,当我使用手动更改所有权时,hadoop fs -chown
我仍然可以删除不属于我的数据库!此外,当我使用时,hadoop put
我获得了正确的权限。
这在 Hive 中可能吗?
我当前的配置是:
核心站点.xml:
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>localhost,master.dev.data</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
hdfs-site.xml:
<property>
<name>fs.permissions.umask-mode</name>
<value>027</value>
</property>
配置单元-site.xml:
<property>
<name>hive.warehouse.subdir.inherit.perms</name>
<description>true if table directories should inherit the permissions of the warehouse or database directory instead of being created with permissions derived from dfs umask</description>
<value>false</value>
</property>
<property>
<name>hive.metastore.pre.event.listeners</name>
<value>org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener</value>
</property>
<property>
<name>hive.security.metastore.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>
</property>
<property>
<name>hive.security.metastore.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value>
</property>
<property>
<name>hive.security.metastore.authorization.auth.reads</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.execute.setugi</name>
<value>true</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
我省略了 Kerberos 密钥表/主体配置,但 Hive Server2 和 Metastore 正在使用“hive/master.host@REALM”主体,并且 Yarn/HDFS 也启用了 Kerberos;所有节点都从 LDAP 获取密码/组。
版本:
hadoop-0.20-mapreduce-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-client-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-hdfs-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-hdfs-namenode-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-mapreduce-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-mapreduce-historyserver-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-yarn-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-yarn-resourcemanager-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hive-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-jdbc-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-metastore-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-server2-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
答案1
您可以尝试hiveserver2
从嵌入式元存储开始吗?
hiveserver2 -hiveconf hive.metastore.uris=' ' ..
这可能是一种解决方法,并且它会判断这是否是仅在远程元存储模式下的错误。
(由于历史原因,在 Hortonworks 我们坚持在 HS2 的嵌入模式下使用元存储,并且我们的系统测试也在该模式下运行。我在该模式下没有看到过这个问题)。