我正在尝试使用基于存储的安全性来保护Hive。 我正在使用Kerberos和LDAP。
我想要得到的是Hive创build目录和文件作为HDFS用户(和他们的主要组)。 这样我希望能够限制基于组成员身份访问数据库。
所以例如当我通过Kerberos使用kinit(import @ REALM)进行用户“导入”(在组“导入”)中的身份validation并运行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
我得到正确的权限。
这是否可能在蜂巢?
我目前的configuration是:
核心-site.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 keytab /主体configuration,但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
你可以尝试启动带有embedded式Metastore的hiveserver2吗?
hiveserver2 -hiveconf hive.metastore.uris=' ' ..
这可能是一个解决方法,它会告诉如果这只是一个与远程Metastore模式的错误。
(由于历史的原因,在Hortonworks,我们坚持使用HS2的embedded式模式下的Metastore,我们的系统testing是以这种模式运行的,在这种模式下我没有看到这个问题)。