欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

HiveMetastore管理员的控制

时间:2023-05-05

当配置 org.apache.hadoop.hive.ql.security.authorization.DefaultHivemetastoreAuthorizationProvider 时,配置文档参考 Hive metaStore 认证和权限模型。第一个角色怎么创建的,用哪个账号连接,用什么命令创建成了问题。

配置 hive.users.in.admin.role

在 hive-site.xml,通过配置 hive.users.in.admin.role,这些用户自动有管理员权限。

hive.users.in.admin.role houzhizhen,admin Comma separated list of users who are in admin role for bootstrapping. More users can be added in ADMIN role later.

启动 metastore, HiveServer2 使用 houzhizhen 账号以 beeline 连接 HiveServer2

发现连不上,因为默认用户 houzhizhen 没有 default 数据库的 select 权限。日志如下:

22/02/17 15:59:20 [main]: WARN jdbc.HiveConnection: Failed to connect to localhost.localdomain:1000022/02/17 15:59:20 [main]: ERROR jdbc.Utils: Unable to read HiveServer2 configs from ZooKeeperError: Could not open client transport for any of the Server URI's in ZooKeeper: Failed to open new session: org.apache.hadoop.hive.ql.metadata.HiveException: metaException(message:No privilege 'Select' found for inputs { database:default}) (state=08S01,code=0)Beeline version 3.1.2 by Apache Hive

分配 houzhizhen 的 default 账号的权限

使用 houzhizhen 账号启动 hive。执行以下命令。

hive> set role admin;OKTime taken: 4756.067 secondshive> grant all on database default to user houzhizhen;

再次使用 houzhizhen 账号以 beeline 连接 HiveServer2

现在成功连接。

22/02/17 17:01:27 [main]: INFO jdbc.HiveConnection: Connected to localhost.localdomain:10000Connected to: Apache Hive (version 3.1.2)Driver: Hive JDBC (version 3.1.2)Transaction isolation: TRANSACTION_REPEATABLE_READBeeline version 3.1.2 by Apache Hive0: jdbc:hive2://localhost:2181/default>

代码分析 HivemetaStore$HMSHandler#init

init 里有一个同步块里。

synchronized (HMSHandler.class) { if (currentUrl == null || !currentUrl.equals(metaStoreInit.getConnectionURL(conf))) { createDefaultDB(); createDefaultRoles(); addAdminUsers(); currentUrl = metaStoreInit.getConnectionURL(conf); }

createDefaultRoles

createDefaultRoles 执行以下操作:

创建 role admin,owner: admin.创建 role public, owner: public.把GLOBAL 分配给角色 admin addAdminUsers

从 配置项 hive.users.in.admin.role 取出用户名,分配角色 admin,这样这些用户就有 admin 权限,但是不一定有 select 权限,需要自己给自己赋权。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。