User hdfs does not have privileges for CREATEDATABASE

4.Sentry测试

4.1创建hive超级用户


1.使用beeline连接HiveServer2,并登录hive用户

[root@ip-172-31-6-148 ~]# beeline 
Beeline version 1.1.0-cdh5.12.0 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: hive
Enter password for jdbc:hive2://localhost:10000: 
Connected to: Apache Hive (version 1.1.0-cdh5.12.0)
Driver: Hive JDBC (version 1.1.0-cdh5.12.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> 

注意:标红部分为输入的hive用户,输入的hive用户并未真正的校验

2.创建一个admin角色

0: jdbc:hive2://localhost:10000> create role admin;
...
INFO  : OK
No rows affected (2.52 seconds)
0: jdbc:hive2://localhost:10000> 

3.为admin角色赋予超级权限

0: jdbc:hive2://localhost:10000> grant all on server server1 to role admin;

...

INFO : OK

No rows affected (0.221 seconds)

0: jdbc:hive2://localhost:10000>

4.将admin角色授权给hive用户组

0: jdbc:hive2://localhost:10000> grant role admin to group hive;

...

INFO : OK

No rows affected (0.162 seconds)

0: jdbc:hive2://localhost:10000>

4.2创建test表


使用beeline登录hive用户,创建一个test表,并插入测试数据

0: jdbc:hive2://localhost:10000> create table test (s1 string, s2 string) row format delimitedfields terminated by ',';

...

INFO : OK

No rows affected (0.592 seconds)

0: jdbc:hive2://localhost:10000> insert into test values('a','b'),('1','2');

...

INFO : OK

No rows affected (20.123 seconds)

0: jdbc:hive2://localhost:10000>

参考:https://cloud.tencent.com/developer/article/1077868

### Hive权限不足导致查询失败的解决方案 当遇到 `Hive permission denied` 错误时,通常是因为当前用户缺少对目标表或数据库的操作权限。以下是针对该问题的具体分析和解决方法: #### 1. **错误原因** - 当前用户的权限不足以执行所需操作。例如,在引用中提到的情况,用户可能未被授予 SELECT 权限[^4]。 - 数据库或表所在的目录可能设置了严格的 HDFS 文件系统权限,阻止了某些用户访问[^2]。 #### 2. **确认当前用户身份** 需要确保使用的用户具有足够的权限来访问指定的表或数据库。可以通过以下命令查看当前登录的用户: ```bash whoami ``` 如果发现是以匿名用户(anonymous)或其他不合适的用户身份运行,则需要切换到正确的用户账户。例如,通过 Beeline 连接 Hive 并显式指定用户名: ```bash beeline -u jdbc:hive2://<host>:<port>/<db> -n <username> ``` #### 3. **授权给特定用户** 可以为用户授予权限以允许其访问所需的资源。假设需要为用户 `batch_user` 授予对表 `sjzl.ybggyssrflb` 的 SELECT 权限,可以使用以下 SQL 命令: ```sql GRANT SELECT ON TABLE sjzl.ybggyssrflb TO USER batch_user; ``` 此外,还可以验证权限是否已成功分配: ```sql SHOW GRANT USER batch_user ON TABLE sjzl.ybggyssrflb; ``` #### 4. **调整 HDFS 文件系统权限** 如果问题是由于底层 HDFS 文件系统的权限设置引起的,则需要修改对应路径的权限。例如,对于 `/user/hive/warehouse/sjzl.db/ybggyssrflb` 路径,可以尝试以下命令: ```bash hdfs dfs -chmod 755 /user/hive/warehouse/sjzl.db/ybggyssrflb hdfs dfs -chown hive:hive /user/hive/warehouse/sjzl.db/ybggyssrflb ``` 上述命令分别赋予了读取和执行权限,并将所有权更改为 `hive` 用户及其所属组[^2]。 #### 5. **禁用 HDFS 权限控制(仅适用于开发环境)** 对于测试或开发环境中频繁出现权限问题的情况,可以选择临时关闭 HDFS 权限检查功能。具体步骤如下: - 登录 Cloudera Manager 或 Ambari Web UI; - 导航至 HDFS 配置页面; - 找到参数 `dfs.permissions` 并将其值设为 `false`; - 保存更改并重启受影响的服务[^3]。 注意:此方法不适合生产环境,因为它会降低安全性。 #### 6. **启用 Kerberos 认证(可选方案)** 在高安全性的集群环境下,建议启用 Kerberos 认证机制以管理用户的身份验证过程。这有助于防止未经授权的访问行为发生[^5]。 --- ### 示例代码 以下是一个完整的示例脚本,用于排查和修复 Hive 查询中的权限问题: ```sql -- 查看当前用户的权限状态 SHOW CURRENT_USER; -- 尝试查询目标表的数据 SELECT * FROM sjzl.ybggyssrflb LIMIT 10; -- 若报错则需先获取相应权限 GRANT SELECT ON TABLE sjzl.ybggyssrflb TO USER batch_user; -- 验证权限是否生效 SHOW GRANT USER batch_user ON TABLE sjzl.ybggyssrflb; ``` 如果仍然无法解决问题,请进一步检查 HDFS 中的实际存储位置是否有适当的访问级别设定。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值