Hive 的权限管理

本文详细介绍了Hive中的用户、组、角色概念,以及在Hivecli、hiveserver2和hcatalogapi中的使用场景。重点讲解了权限模型,包括StorageBasedAuthorization和SQLStandardsBasedAuthorization。还涵盖了授权管理的命令、角色、用户授权和权限分配等内容,以及如何开启和验证Hive的权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

​编辑

一、Hive权限简介

1.1 hive中的用户与组

1.1.1 用户

1.1.2 组

1.1.3 角色

1.2 使用场景

1.2.1 hive cli

1.2.2 hiveserver2

1.2.3 hcatalog api

1.3 权限模型

1.3.1 Storage Based Authorization in the Metastore Server

1.3.2 SQL Standards Based Authorization in HiveServer2

1.3.3 Default Hive Authorization (Legacy Mode)

1.4 hive的超级用户

二、授权管理

2.1 管理命令

2.1.1 角色

2.1.1.1 创建角色

2.1.1.2 删除角色

2.1.1.3 设置角色

2.1.1.4 查看当前具有的角色

2.1.1.5 查看所有存在的角色

2.1.2 用户

2.1.2.1 用户进入admin角色权限

2.1.2.2 查看某用户的所有角色

2.1.2.3 给角色添加用户

2.1.3 用户授权

2.1.3.1 基于数据库

2.1.3.2 基于某张表

2.1.4 组授权

2.1.4.1 基于数据库

2.1.4.2 基于某张表

2.1.5 角色授权

2.1.5.1 基于数据库

2.1.5.2 基于某个表

2.1.6 用户移出权限

2.1.6.1 基于数据库

2.1.6.2 基于某个表

2.1.7 查看用户权限

2.1.7.1 查看某用户在某数据库的权限

2.1.7.2 查看某用户在某表的权限

2.2 权限表

2.2.1 HIVE支持的权限

2.2.2 权限和操作对应关系

2.3 权限分配图

2.4 hive开启权限管理

2.4.1 设置开启hiveserver2权限管理

2.4.2 开启hive权限管理

2.4.3 验证权限


一、Hive权限简介

1.1 hive中的用户与组

hive权限中有用户、组、角色的概念。

1.1.1 用户

即操作系统中的用户,或者在hiveserver2中定义的用户。

1.1.2 组

即操作系统中的组。(组是相对默认授权方式来说的)

1.1.3 角色

是一组权限的集合,参考关系型数据库。
hive内置public角色。public,所有用户都拥有的角色。

1.2 使用场景

目前主要通过以下三种方式使用hive:

hive cli、hiveserver2、hcatalog api

1.2.1 hive cli

hive cli中的用户是操作系统中存在的用户。使用hive cli,只会验证用户的hdfs目录权限。

1.2.2 hiveserver2

hiveserver2中的用户即可以是操作系统中的用户,也可以是hiveserver2中定义的用户。
hiveserver2默认开启用户代理,即用启动hiveserver2的用户来模拟实际用户来提交任务,这时的权限是实际提交的用户的。如果关闭代理,则以启动hiveserver2的用户的权限来执行。

1.2.3 hcatalog api

通过hcatalog api访问hive的用户只会检查用户hdfs上的目录权限。

1.3 权限模型

1.3.1 Storage Based Authorization in the Metastore Server

基于存储权限验证metastore服务:默认情况下hive像dbms一样管理权限,但是有时候为用户授权后用户却没有hdfs权限。因此,当前hive元数据授权的方式是结合dbms权限管理和底层的存储权限管理。当用hive给用户授权时,会先检查用户是hdfs的对应目录是否有相应权限,如果有再执行授权,如果没有则反错。可以对Metastore中的元数据进行保护,但是该种权限模式没有提供更加细粒度的访问控制(例如:列级别、行级别)。

比如给用户授权查询test.t1表时,如果用户在hdfs上没有访问hdfs://user/hive/warehouse/test/t1目录权限则会直接报错。默认是不开启的。

1.3.2 SQL Standards Based Authorization in HiveServer2

基于sql的hiveserver2的权限验证。基于存储的权限验证方式只能验证用户是否有访问目录或文件的权限,但无法执行如列访问之类更精细的控制,因此要用基于sql的权限控制方式。hiveserver2提供了一套完全类似sql的权限验证,可以设置role、用户,可以执行表级、行级、列级授权。

注意:hive cli是不支持sql验证方式的。因为用户可以在cli中改变验证规则甚至禁用该规则。

特点

1)dfs add delete compile reset会被禁止
2)set 命令被限制,只能用来设置少量安全的参数。hive.security.authorization.sqlstd.confwhitelist 参数可设置set可以设置哪些参数。
3)add/drop function以及宏只能被admin角色使用的
4)只能有admin角色来创建永久性函数,其它用户都可以使用
5)admin角色必须使用set role=admin来启动角色

用户和角色

非常类似关系型数据库,用户可以被授予角色。角色是一组权限的集合。
内置了public和admin两个角色,每个用户都有public角色,可以执行基本操作。admin为管理角色。用户登录hiveserver2时执行 show current roles;来查看当前角色。使用set role切换角色。
admin角色用户可以创建其它角色。做admin角色前,做set role切换到admin角色。
role name不分大小写,但是用户名分大小写。

1.3.3 Default Hive Authorization (Legacy Mode)

类似于dbms的授权方式,但是人人都可以执行Grant,当然也可以实现超级用户类来管理hive.开启权限验证后,不配置上面的两个默认就是用这个。

设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。

1.4 hive的超级用户

默认hive是不启用权限验证的,只要使用hive的用户在hdfs上权限即可。默认存在超级用户,用户可以通过自定义类来实现超级用户。使用超级启用必须开始权限验证。

二、授权管理

2.1 管理命令

2.1.1 角色

2.1.1.1 创建角色
CREATE ROLE role_name;
2.1.1.2 删除角色
DROP ROLE role_name;
2.1.1.3 设置角色
SET ROLE (role_name|ALL|NONE);
2.1.1.4 查看当前具有的角色
SHOW CURRENT ROLES;
2.1.1.5 查看所有存在的角色
SHOW ROLES;

2.1.2 用户

2.1.2.1 用户进入admin角色权限
set hive.users.in.admin.role;
set role admin;
2.1.2.2 查看某用户的所有角色
show role grant user user_name
2.1.2.3 给角色添加用户
grant role role_name to user user_name;

2.1.3 用户授权

2.1.3.1 基于数据库
grant select on database default to useradmin;

2.1.3.2 基于某张表
grant select on table test_table to user admin;

2.1.4 组授权

2.1.4.1 基于数据库
grant select on database default to  group  admin;
2.1.4.2 基于某张表
grant select on table ppdata  to  group  admin;

2.1.5 角色授权

2.1.5.1 基于数据库
grant select on database default to  role  admin;
2.1.5.2 基于某个表
grant select on table ppdata to role  admin;

2.1.6 用户移出权限

2.1.6.1 基于数据库
revoke select on database default from useruserB;
2.1.6.2 基于某个表
revoke select on table ppdata from useruserB;

2.1.7 查看用户权限

2.1.7.1 查看某用户在某数据库的权限
show grant role role_name on database database_name;
2.1.7.2 查看某用户在某表的权限
show grant role role_name on [table] table_name;

2.2 权限表

2.2.1 HIVE支持的权限

权限名称含义
ALL所有权限
ALTER允许修改元数据(modify metadata data of object)---表信息数据
UPDATE允许修改物理数据(modify physical data of object)---实际数据
CREATE允许进行Create操作
DROP允许进行DROP操作
INDEX允许建索引(目前还没有实现)
LOCK当出现并发的使用允许用户进行LOCK和UNLOCK操作
SELECT允许用户进行SELECT操作
SHOW_DATABASE允许用户查看可用的数据库

2.2.2 权限和操作对应关系

2.3 权限分配图

2.4 hive开启权限管理

2.4.1 设置开启hiveserver2权限管理

#在hiveserver2-site.xml中加入如下配置
<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
</property>
<property>
  <name>hive.server2.enable.doAs</name>
  <value>false</value>
</property>
<property>
  <name>hive.users.in.admin.role</name>
  <value>root</value>
</property>
<property>
  <name>hive.security.authorization.manager</name>  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property>
  <name>hive.security.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>

2.4.2 开启hive权限管理

#在hive-site.xml中加入如下配置
<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
</property>
<property>
  <name>hive.server2.enable.doAs</name>
  <value>false</value>
</property>
<property>
  <name>hive.users.in.admin.role</name>
  <value>root</value>
</property>
<property>
  <name>hive.security.authorization.manager</name>  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property>
  <name>hive.security.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>

2.4.3 验证权限

我们不使用账号密码登录hiveserver2,或者使用普通角色用户登录hiveserver2,我们查看下psn4表的数据

执行:select * from psn4;

执行结果:

我们发现,权限管理生效的,不是自己创建的表,没有权限查看。

好了,今天Hive权限管理的相关内容就分享到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

<think>首先,用户的问题是关于Hive权限管理的设置教程。他们想知道如何在Hive中设置和管理权限。我需要根据提供的系统级指令和用户可见层的要求来构建回答。系统级指令的关键点:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式。-LaTeX语法正确。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识,例如[^1]。用户可见层的要求:-回答结构清晰,帮助用户逐步解决问题。-尽量保证回答真实可靠。-参考站内引用:引用[1]到[4]是关于Hive权限管理的。站内引用内容:-引用[1]:介绍Hive权限管理的必要性,默认不开启。-引用[2]:如何通过修改配置文件开启权限管理。-引用[3]:涉及角色创建、权限测试等。-引用[4]:讨论不同的授权模式,如基于存储的授权、基于SQL标准的授权和默认授权。用户上一次的问题可能是关于Hive权限管理的设置,所以我需要基于这些引用构建一个教程。回答结构:1.**引言**:简要介绍Hive权限管理的重要性。2.**步骤**:逐步指导如何设置权限管理。-开启权限管理。-配置相关参数。-创建角色和用户。-授予权限。-测试权限。3.**授权模式**:解释不同的授权模式。4.**注意事项**:提醒常见问题。5.**相关问题**:生成相关问题。确保使用中文回答。在回答中,引用段落末尾添加引用标识,如[^1]。参考引用内容时,自然地融入。例如:-在讨论开启权限时,引用引用[2]。-在讨论授权模式时,引用引用[4]。生成相关问题:-在结尾部分,添加“相关问题”部分。LaTeX使用:-用户问题中没有数学表达式,所以可能不需要LaTeX。但指令说“所有行内数学表达式必须使用”,所以如果有数学内容,就使用。Hive权限管理可能不涉及数学,所以可能不需要。如果有,比如涉及数字或公式,就应用。最终回答:-以清晰、分步方式组织。-结束时添加相关问题。</think>### Hive权限管理设置教程 Hive权限管理是确保数据仓库安全的关键功能。默认情况下,Hive不开启权限控制,所有用户都具有超级管理员权限,这可能导致数据泄露或误操作风险[^1]。本教程将逐步指导你如何设置和管理Hive权限,基于SQL标准的授权模式(推荐方式),确保操作真实可靠。以下是详细步骤: #### 1. **开启Hive权限管理** 首先,修改Hive配置文件以启用授权功能。编辑 `hive-site.xml` 文件,添加以下参数: - 设置 `hive.security.authorization.enabled` 为 `true`,启用权限控制[^2]。 - 可选配置:设置 `hive.security.authorization.createtable.owner.grants` 参数,定义表创建者的默认权限(例如 `ALL` 表示所有权限)[^2]。 ```xml <property> <name>hive.security.authorization.enabled</name> <value>true</value> <description>enable or disable the hive client authorization</description> </property> <property> <name>hive.security.authorization.createtable.owner.grants</name> <value>ALL</value> <description>自动授予表创建者权限</description> </property> ``` 保存文件后,重启Hive服务使配置生效。 #### 2. **配置授权模式** Hive支持多种授权模式,推荐使用**基于SQL标准的授权(HiveServer2)**,因为它提供细粒度控制(如表、列级别权限)[^4]。在 `hive-site.xml` 中确认模式设置: - 确保 `hive.security.authorization.manager` 参数指向 `org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory`。 - 避免使用默认授权模式(Legacy Mode),它仅防止误操作,不防恶意访问[^4]。 #### 3. **创建角色和用户** 使用Hive命令行工具(如Beeline)创建角色和分配权限: - 连接HiveServer2(例如通过Beeline): ```bash beeline -u "jdbc:hive2://<hostname>:10000" -n <username> -p <password> ``` - 创建角色(例如 `readonly`): ```sql CREATE ROLE readonly; ``` - 将角色授予用户或组(例如授予用户组 `analysts`): ```sql GRANT ROLE readonly TO GROUP analysts; ``` 引用[^3]提到,角色管理需结合Hadoop用户组,确保一致性。 #### 4. **授予和撤销权限** 基于SQL语法,为角色分配具体权限: - **授予权限**(例如允许 `readonly` 角色查询表): ```sql GRANT SELECT ON TABLE database.table TO ROLE readonly; ``` - **撤销权限**(例如移除写权限): ```sql REVOKE INSERT ON TABLE database.table FROM ROLE readonly; ``` 支持权限包括:`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `ALL` 等。表创建者默认拥有所有权限,可通过配置调整[^2]。 #### 5. **测试权限设置** 验证权限是否生效: - 切换角色测试(例如在Beeline中): ```sql SET ROLE readonly; SELECT * FROM test_table; -- 应成功 INSERT INTO test_table VALUES (1); -- 应失败,如果未授权 ``` - 查看角色权限: ```sql SHOW ROLE GRANT GROUP analysts; -- 显示角色分配情况 ``` 引用[^3]强调,测试时需确保Kerberos认证等安全机制已启用。 #### 6. **注意事项** - **安全强化**:结合Kerberos认证提升安全性,防止未授权访问[^3]。 - **性能影响**:开启权限管理可能轻微增加元数据操作延迟,建议在生产环境测试。 - **常见问题**:如果权限不生效,检查配置文件和用户组映射(如Hadoop的 `core-site.xml`)。 - **备份**:修改权限前备份元数据,避免误操作。 通过以上步骤,你可以有效管理Hive权限,确保数据安全。Hive权限管理依赖于Hadoop生态系统,建议参考官方文档以适配具体版本[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值