Hive 的权限管理

2023-09-21 11:01:22

目录

​编辑

一、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权限管理的相关内容就分享到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

更多推荐

(二十九)大数据实战——kafka集群节点服役与退役案例实战

前言本节内容是关于kafka集群节点的服役与退役,从而实现kafka集群的缩容与扩容。在开始本节内容之前,我们要预先安装好kafka集群,并准备一台空余的服务器用来完成我们扩容与缩容的案例。关于kafka集群的安装内容这里不在赘述,相关内容请查看作者往期博客内容。正文从hadoop103克隆一台空闲服务器hadoop1

QT信号槽实现原理

定义Q_OBJECT宏在宏中声明了几个重要的成员变量及成员函数,包括声明了一个只读的静态成员变量staticMetaObject,以及3个public的成员函数staticconstQMetaObjectstaticMetaObject;virtualconstQMetaObject*metaObject()const

低代码之IVX

低代码之IVX一、如何去分析不同的低代码平台🧝‍♂️1.看自己的网站和平台是不是通过自己的低代码/无代码平台生成的2.生成源代码的能力3.可视化的逻辑编排二、低代码平台未来的发展方向👨‍🌾三、优质低代码平台介绍👨‍💼1.什么是iVX:2.iVX和其它低代码平台的区别上手步骤1.1iVX线上集成环境进入1.2创

python爬虫——爬取豆瓣top250电影数据(适合初学者)

前言:爬取豆瓣top250其实是初学者用于练习和熟悉爬虫技能知识的简单实战项目,通过这个项目,可以让小白对爬虫有一个初步认识,因此,如果你已经接触过爬虫有些时间了,可以跳过该项目,选择更有挑战性的实战项目来提升技能。当然,如果你是小白,这个项目就再适合不过了。那么就让我们开始吧!目录一、实战1.对豆瓣网网站进行Ajax

数据库设计与建模

数据库设计与建模1数据库设计的三范式2数据库建模2.1建模工具2.2使用pd建模1数据库设计的三范式三范式:1.第一范式(1NF):确保每一列的原子性(做到每列不可拆分)2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件事)3.第三范式(3NF):在第二范式的基础上,消除传递依赖反三范

IOS数据管理

在iOS中,没有直接与Android中的SharePreference相对应的概念。而是使用不同的机制来处理应用程序的持久化数据。在iOS中,你可以使用以下几种方法来保存和读取应用程序的数据:UserDefaults(用户默认设置):UserDefaults提供了一种简单的键值存储机制,用于存储应用程序的配置和用户偏好

【Jetpack】Navigation 导航组件 ③ ( 为 Navigation Graph 页面跳转 action 添加跳转动画 )

文章目录一、为NavigationGraph添加跳转动画1、进入NavigationGraph配置的Design模式2、选中action跳转3、为action跳转设置enterAnim进入动画4、为action跳转设置exitAnim退出动画5、通过代码为action跳转设置进入/退出动画6、执行效果代码地址:CSDN

Qt/C++音视频开发54-视频监控控件的极致设计

一、前言跌跌撞撞摸爬滚打一步步迭代完善到今天,这个视频监控控件的设计,在现阶段水平上个人认为是做的最棒的(稍微自恋一下),理论上来说应该可以用5年不用推翻重写,推翻重写当然也是程序员爱干的事情,这个就要考验个人的功底,设计的好框架搭建的好,可以很多年不用变,只需要在现有框架小修小补即可,最多就是继承基类实现一些特殊性的

【机器学习】详解回归(Regression)

文章目录是什么的问题案例说明是什么的问题回归分析(RegressionAnalysis)是研究自变量与因变量之间数量变化关系的一种分析方法,它主要是通过因变量Y与影响它的自变量Xi(i1,2,3…)X_i(i1,2,3…)Xi​(i1,2,3…)之间的回归模型,衡量自变量XiX_iXi​对因变量Y的影响能力的,进而可以

【SpringCloud】微服务技术栈入门1 - 远程服务调用、Eureka以及Ribbon

目录远程服务调用RestTemplateEureka简要概念配置Eureka环境设置EurekaClientEureka服务发现Ribbon工作流程配置与使用Ribbon饥饿加载远程服务调用RestTemplateRestTemplate可以模拟客户端来向另外一个后端执行请求黑马给出的微服务项目中,有两个boot项目,

03使用Spring基于XML的方式注册第一个组件

基于XML的方式注册第一个组件开发步骤第一步:创建Maven工程配置生成的pom.xml文件,添加springcontext基础依赖和junit依赖(注意根据Spring官方文档描述,Spring6需要JDK版本17)当添加Spring的基础依赖springcontext之后,Maven会自动关联并引入其他依赖spri

热文推荐