hive cli:表不是使用与数据库相同的用户创建的(权限被拒绝)

vh0rcniy  于 2021-05-31  发布在  Hadoop
关注(0)|答案(0)|浏览(357)

平台:6节点hdp3集群
从datanode(非namenode)执行此操作
目标:让新用户创建一个数据库,并在其中创建一个表。很简单。
以下是我遵循的步骤,以及我得到的错误:

[root@server:~]useradd lebowski               // create user
[root@server:~]passwd lebowski 
[root@server:~]usermod -a -G hadoop lebowski  // add user to hadoop group
[root@server:~]su lebowski
[lebowski@server:~]$ groups
lebowski hadoop           //All good

[lebowski@server:~]$hive                          //same output & issues w/ beeline as well
0: jdbc:hive2://server.com> CREATE DATABASE dude;
0: jdbc:hive2://server.com> use dude;

0: jdbc:hive2://server.com> CREATE TABLE BIG (//table creation stuff goes here//);

错误:失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddltask返回代码1。元异常(message:gotexception:org.apache.hadoop.security.accesscontrolexception
许可denied:user=lebowski,access=execute,inode=“/warehouse/tablespace/managed/hive/dude.db”:hive:hadoop:drwxrwx---
现在您可以看到:hdfs上的dude.db文件归hive所有,属于组“hadoop”

dude.db:hive:hadoop:drwxrwx---

令人惊讶的事实:
-作为 hive.server2.enable.doAs 如果设置为true,则hiveserver2应在用户提交查询时执行配置单元操作。
-数据库所有者是 hive ,尽管提交查询的用户 lebowski .
-不过,表的创建是链接到用户的 lebowski ,在尝试写入以前在hdfs中创建的数据库文件夹时被拒绝。
我尝试的是:
我试着强迫 hadoop.security.group.mappingShellBasedUnixGroupsMapping 但这会导致namenode重启失败,所以我将其恢复为默认值(jni)。
我还尝试刷新组Map: hdfs dfsadmin -refreshUserToGroupsMappings 问:为什么同一个上下文使用一个技术用户在hdfs(在创建数据库的情况下是hive)上编写,而实际用户(lebowski)在下一个语句中创建表?
另一件令人费解的事情是,我确保用户(lebowski)在hadoop用户组中。
所以从逻辑上讲,不应该引发这个错误:用户所在的组 rwx 对hdfs文件夹的权限。
一个可能的解释是我在这篇文章中的出发点:“unix”用户lebowski是从一个数据节点创建的,所以我不确定它是如何传播到整个集群的
另一个线索是hive角色管理和授权,它可能会中断/干扰/覆盖基于posix的权限。
可能的解决方法:我可以作为hdfs或hive连接,或者强制进入 chmod 但我想,就这一次,按照惯例,以生产友好的方式做事,而不是在这件事上胡作非为。
其他信息:
ranger已安装,但配置单元插件未激活 hive.security.authorization.manager 设置为org.apache.hadoop.hive.ql.security.authorization.plugin.fallback.fallbackhiveauthorizerfactory hive.security.authorization.enabled 设置为真
任何开明的思想都是受欢迎的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题