hive3.x does not have following privileges for operation CREATETABLE [[OBJECT OWNERSHIP] on Object

问题记录:hive3.x ,管理员hadoop用户拥有创建database权限,创建guest_tmp 数据库并赋all权限后,使用其他用户登录无法建表报错:Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [name=guest, type=USER] does not have 
following privileges for operation CREATETABLE [[OBJECT OWNERSHIP] on Object [type=DATABASE, name=guest_tmp]] (state=42000,code=40000)

如下:1. 使用hadoop用户登录beeline:

set role admin;
grant all on database guest_tmp to user guest;

show grant user guest on database guest_tmp;
+------------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
|  database  | table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+------------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| guest_tmp  |        |            |         | guest           | USER            | DELETE     | false         | 1629294254000  | hadoop   |
| guest_tmp  |        |            |         | guest           | USER            | INSERT     | false         | 1629294254000  | hadoop   |
| guest_tmp  |        |            |         | guest           | USER            | SELECT     | false         | 1629294254000  | hadoop   |
| guest_tmp  |        |            |         | guest           | USER            | UPDATE     | false         | 1629294254000  | hadoop   |
+------------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+

2. 使用guest用户登录beeline,执行建表语句报错

0: jdbc:hive2://172-16-16-239:10000> create  table guest_tmp.test1(id int) ;
Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [name=guest, type=USER] does not have 
following privileges for operation CREATETABLE [[OBJECT OWNERSHIP] on Object [type=DATABASE, name=guest_tmp]] (state=42000,code=40000)

以为是hdfs目录权限问题,改变属组后仍然同样错误。

修改数据库guest_tmp的OWNER

ALTER DATABASE guest_tmp SET OWNER user guest;

再次使用guset用户建表成功,问题解决!!

另外,将表的owner设置为guest后hadoop用户却没有权限,

优雅解决方式,可创建guest_tmp_role组,
将hadoop和guset用户加入组中:

GRANT ROLE role_name TO USER user1 ;

并将数据库guest_tmp的role设置成guest_tmp_role后,2个用户都有建表权限:

ALTER DATABASE guest_tmp SET OWNER role  guest_tmp_role;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值