SQL Standard Based Hive Authorization(基于SQL标准的Hive授权)

说明:该文档翻译/整理于Hive官方文档https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authorization#SQLStandardBasedHiveAuthorization-ObjectPrivilegeCommands

Hive 0.13版本之前的授权现状

 

Hive默认授权(Default Hive Authorization (Legacy Mode))

设计目的并不是为了防止恶意用户访问(操作)未经授权的数据;

帮助用户避免一些意料之外的操作行为;

授权机制并不完善,在很多指令方面都没有进行授权确认,比如授权指令Grant;

授权确认发生在Hive SQL语句的编译阶段;

允许用户执行dfs指令、用户自定义函数以及shell指令,这些特殊操作很有可能跳过客户端的安全机制;

通过创建视图,并为视图进行授权(而不是为视图所依赖的表授权),从而提供细粒度的访问控制(仅可以访问表中的某几列)。

基于存储的授权(Storage Based Authorization in the Metastore Server)

 

通常用于Metastore Server API的授权;

Hive 0.12.0版本之后开始支持;

虽然能够保护Metastore中的元数据不被恶意用户破坏,但是没有提供细粒度的访问控制(列级别、行级别)

基于SQL标准的Hive授权(SQL Standards Based Hive Authorization)

基于SQL标准的Hive授权为Hive授权提供了第三个选择,它完全兼容SQL的授权模型,不会给现在的用户带来向后兼容的问题,因此被推荐使用。一旦用户迁移到这种更加安全的授权机制后,默认的授权机制可以被遗弃掉。

基于SQL的授权模型可以和基于存储的授权模型(Hive Metastore Server)结合使用。

和Hive的默认授权机制一样,授权确认发生的SQL语句的编译阶段。

为了保证该授权模型起到安全作用,客户端同样需要安全保证,可以通过以下两种方式做到:

(1)用户访问必须且仅可以通过HiveServer2;

(2)限制用户代码和非SQL指令被执行。

授权确认时是以提交SQL指令的用户身份为依据的,但SQL指令是以Hive Server用户身份(即Hive Server的进程用户)被执行的,因此Hive Server用户必须拥有相应目录(文件)的权限(根据SQL指令的不同,所需权限也不同)。

尽可能与标准SQL保持一致,但具体实现时存在些许偏差。有一些是因为方便现有用户进行迁移(授权相关),另一些是出于方便使用的目的。

在这种授权模型控制下,拥有权限使用Hive CLI、HDFS commands、Pig command line、‘hadoop jar‘ 等工具(指令)的用户被称为特权用户。在一个组织(团队)内,仅仅一些需要执行ETL相关工作的团队需要这些特殊权限,这些工具的访问不经过HiveServer2,因此它们不受这种授权模型的控制。对于需要通过Hive CLI、Pig和MapReduce访问Hive表的用户,可以通过在Hive Metastore Server中启用Storage Based Authorization来进行相应的权限控制;其它情况则可能需要结合Hadoop的安全机制进行。

大多数的用户(使用SQL语句,并通过ODBC/JDBC访问HiveServer2进行商业分析)是可以使用这种授权模型进行权限控制的。

Hive指令和语句的限制

当使用基于SQL标准的授权模型时,

dfs、add、delete、compile、reset被禁用;

transform clause被禁用。

改变Hive配置的指令集合被限制为仅某些用户可以执行,可以通过hive.security.authorization.sqlstd.confwhitelist(hive-site.xml)进行配置。

添加或删除函数、宏的权限被限制为仅具有admin角色的用户可以执行。

为了用户可以使用(自定义)函数,创建永久函数(create permanent functions)的功能被添加。拥有角色admin的用户可以执行该指令添加函数,所有添加的函数可以被所有的用户使用。

权限

SELECT:赋予读取某个对象的权限;

INSERT:赋予添加数据至某个对象(表)的权限;

UPDATE:赋予在某个对象(表)上执行更新操作的权限;

DELETE:赋予在某个对象(表)上删除数据的权限;

ALL:赋予在某个对象上的所有权限(被转换成拥有上面四个权限)。

对象

权限被应用到表或者视图上,上面所描述的权限不支持应用于数据库上。

数据库所有者被用来确认某些特殊操作的权限;

Hive允许用户在SQL语句中使用URI,因此URI也是Hive的一种对象。上面所描述的权限不适用于URI对象。URI通常指向文件系统(HDFS)的一个文件或目录,授权是基于用户(提交SQL语句的用户,SQL语句中包含URI对象)在文件或目录上的权限进行的。

对象所有者

对于某些特殊操作,是否是该对象(表/视图/数据库)的对象所有者决定了是否有权限在该对象上执行这些特殊操作。

用户创建表、视图或者数据库,该用户即成为所创建表、视图或者数据库的所有者。对于表或者视图来说,所有者拥有对它们进行操作的所有权限(SELECT、INSERT、UPDATE、DELETE)。

数据库的所有者也可以是一个角色,可以通过“alter database”指令设置一个数据库的所有者为一个角色。

用户和角色

用户和角色均可以被赋予权限。

用户可以属于一个或多个角色。

有两个具有特殊意义的角色:public和admin。

所有用户均属于角色public,我们使用该角色并通过grant语句将权限赋予给其它用户。

当用户执行查询或指令的时候,用户被赋予的权限以及用户的“当前角色(可以为多个)”的权限被确认。“当前角色”可以通过”show current roles”进行查看。默认情况下,“当前角色”即为用户所属的所有角色(角色admin除外),我们可以通过指令“set role”指定某个角色成为“当前角色”。

作为数据库管理员的用户通常被添加至角色admin。

具有角色admin的用户可以执行额外的指令,如create role或者drop role。他们也有访问对象的全部权限,即使他们并没有被显式授权。因为角色admin默认不属于“当前角色”,一个属于角色admin的用户要想得到角色admin的权限,必须通过指令set role先将“当前角色”切换至角色admin。

用户(角色)名称

角色名称大小写不敏感。

用户名称大小写敏感。

带引号的标识符(Quoted Identifiers)

一般情况下不建议使用,忽略此小节。

角色管理指令

Create Role

CREATE ROLE role_name;

仅仅角色admin具有该权限。角色名称ALL、DEFAULT和NONE被保留。

Drop Role

DROP ROLE role_name;

仅仅角色admin具有该权限。

Show Current Roles

 

SHOW CURRENT ROLES;

显示用户的“当前角色”列表。

判断用户权限时涉及两个方面:

用户是否被赋予相应权限;

用户所属角色(可能为多个)是否被赋予相应权限。

默认“当前角色”包含用户所属的所有角色,但角色admin除外,即使该用户属于角色admin。

所有用户均可以执行该指令。

Set Role

SET ROLE (role_name|ALL);

如果role_name被指定,则角色role_name成为“当前角色”中的唯一角色。

如果指定role_name为ALL,则会刷新“当前角色”列表,用于用户被赋予新的角色时使用。

如果用户并不属于role_name所代表的角色,则会导致一个错误。

Show Roles

SHOW ROLES;

列出当前存在的所有角色。

仅仅角色admin具有该权限。

Grant Role

GRANT role_name [, role_name] ...

TO principal_specification [, principal_specification] ...

[ WITH ADMIN OPTION ];

principal_specification

: USER user

| ROLE role

将一个或多个角色赋予给另一些角色或用户。

如果指定“WITH ADMIN OPTION”,被赋予角色的用户可以将相应的角色赋予给其它用户或角色。

如果上面的Grant语句会导致角色循环,则执行会失败。

Revoke Role

REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...

FROM principal_specification [, principal_specification] ... ;

principal_specification

: USER user

| ROLE role

从指定的用户或角色中回收指定的角色。

Show Role Grant

SHOW ROLE GRANT (USER|ROLE) principal_name;

principal_name为用户或角色名称。

列出指定用户或角色被赋予的角色列表。

所有用户均可以执行该指令。

Show Principals

SHOW PRINCIPALS role_name;

列出属于指定角色的所有角色和用户。

仅仅角色admin具有该权限。

管理对象权限

Grant

GRANT

priv_type [, priv_type ] ...

ON table_or_view_name

TO principal_specification [, principal_specification] ...

[WITH GRANT OPTION];

Revoke

REVOKE [GRANT OPTION FOR]

priv_type [, priv_type ] ...

ON table_or_view_name

FROM principal_specification [, principal_specification] ... ;

principal_specification

: USER user

| ROLE role

priv_type

: INSERT | SELECT | UPDATE | DELETE | ALL

如果一个用户被赋予某表/视图的权限时曾指定“WITH GRANT OPTION”,则该用户可以将得到的某表/视图的权限赋予/回收给其它用户或角色。

注意:回收权限时,CASCADE在当前版本中是不被支持的,即仅能回收指定用户或角色的权限,通过这些用户或角色赋予出去的权限则没有被回收。

Show Grant

SHOW GRANT [principal_name] ON (ALL| ([TABLE] table_or_view_name)

principal_name为用户或角色名称。

附:Hive操作权限列表

Codes

Y:  Privilege required.

Y + G:  Privilege "WITH GRANT OPTION" required.

Action Select Insert Update Delete Ownership Admin URI Privilege (RWX Permission + Ownership)
CREATE TABLE         Y (of database)   Y  (for create external table – the location)
DROP TABLE         Y    
DESCRIBE TABLE Y            
SHOW PARTITIONS Y            
ALTER TABLE LOCATION         Y   Y (for new location)
ALTER PARTITION LOCATION         Y   Y (for new partition location)
ALTER TABLE ADD PARTITION   Y         Y (for partition location)
ALTER TABLE DROP PARTITION       Y      
ALTER TABLE (all of them except the ones above)         Y    
TRUNCATE TABLE         Y    
CREATE VIEW Y + G            
ALTER VIEW PROPERTIES         Y    
ALTER VIEW RENAME         Y    
DROP VIEW PROPERTIES         Y    
DROP VIEW         Y    
ANALYZE TABLE Y Y          
SHOW COLUMNS Y            
SHOW TABLE STATUS Y            
SHOW TABLE PROPERTIES Y            
CREATE TABLE AS SELECT Y (of input)       Y (of database)    
CREATE INDEX         Y (of table)    
DROP INDEX         Y    
ALTER INDEX REBUILD         Y    
ALTER INDEX PROPERTIES         Y    
SELECT Y            
INSERT   Y   Y (for OVERWRITE)      
UPDATE     Y        
DELETE       Y      
LOAD   Y (output)   Y (output)     Y (input location)
SHOW CREATE TABLE Y+G            
CREATE FUNCTION           Y  
DROP FUNCTION           Y  
CREATE MACRO           Y  
DROP MACRO           Y  
MSCK (metastore check)           Y  
ALTER DATABASE           Y  
CREATE DATABASE             Y (if custom location specified)
EXPLAIN Y            
DROP DATABASE         Y    
时间: 2024-08-10 23:16:41

SQL Standard Based Hive Authorization(基于SQL标准的Hive授权)的相关文章

[[Hive - LanguageManual ] ]SQL Standard Based Hive Authorization

Status of Hive Authorization before Hive 0.13 SQL Standards Based Hive Authorization (New in Hive 0.13) Restrictions on Hive Commands and Statements Privileges Objects Object Ownership Users and Roles Names of Users and Roles Role Management Commands

基于SQL的日志分析工具myselect

基本介绍 程序开发人员经常要分析程序日志,包括自己打印的日志及使用的其它软件打印的日志,如php,nginx日志等,linux环境下分析日志有一些内置命令可以使用,如grep,sort,uniq,awk等,其中最强大的是awk,是作为一门小巧的文本处理语言存在的,但由于它是一门语言,功能强大,但在命令行下使用并不那么方便,因为awk是面向计算而不是面向统计的.awk可以定义变量,可以进行计算,命令行下就是一个包含隐式for循环的语言. awk如果很长时间不用,它的一些语法就忘了,要分析线上日志时

[MS]Microsoft SQL Server 2008 R2 开发版/企业版/标准版

Microsoft? SQL Server? 2008 R2 是一个功能强大且可靠的数据管理系统,它功能丰富,能保护数据,并且可改善嵌入式应用程序.轻型网站和应用程序以及本地数据存储区的性能. 数据中心版:PTTFM-X467G-P7RH2-3Q6CG-4DMYB(可用,已验证)DDT3B-8W62X-P9JD6-8MX7M-HWK38(待测) 开发版:MC46H-JQR3C-2JRHY-XYRKY-QWPVM (可用,已验证)FTMGC-B2J97-PJ4QG-V84YB-MTXX8(待测)

bug统计分析续(一)基于SQL的Bug统计方法

上一篇为 bug统计分析初步 本篇重点讨论基于sql的bug统计分析方法. 1.与时间和状态的关系: 1)考察每个时间单位(年.月.日)产生的bug量 2)考察每个时间单位(年.月.日)解决的bug量 3)考察每个时间单位(年.月.日)遗留的bug量 4)考察每个bug遗留的时间单位(年.月.日) 5)考察平均bug遗留的时间单位(年.月.日) 6)通过结合1).2).3)考察分析发现.解决bug的时间段(月.日.时)峰值 其中6可以用来指导测试.开发效率 2.与时间.角色的关系: 1)考察每个

基于SQL脚本将数据库表及字段提取为C#中的类

开发时,勉不了需要使用SQL直接与数据库交互,这时对于数据库中的表名及字段名会使用的比较多.如果每使用一次都复制一个,实在蛋疼. 所以就考虑将其做成const常量.但是数据库中的表和字段相当多,一个一个敲,不但累,还有可能敲错.要保证正确,最好的办法当然是使用工具或者脚本. 这里提供一个SQL脚本的实现. 原理:获取数据库的表--->遍历每个表中的字段--->生成数据 SQL代码 DECLARE @tableName VARCHAR(MAX) DECLARE @tableCount int D

SQL优化之基于SQL特征的改写

前言 今天老K继续与大家分享第九期. 周末老K宅在家观战了两局精彩的"人狗"大战.老K既算不上科技迷,也算不上围棋迷,不过对此颇有感触:阿尔法狗不过是通过左右互博的方式不断学习围棋,然而依赖其最优的学习算法(学习方法)却能再短短的数月之内达到人类围棋水平的最顶端:而李世石在却是依赖其已有的经验结合人类特有的灵感下出"神之一手",人类终究还是可以战胜拥有超强计算能力的阿尔法狗.这些不禁让老K想起了自己在工作过程中的最有艺术性的部分---"SQL tunnin

数据库原理与应用 基于SQL Server 2005pdf

下载地址:网盘下载 <数据库原理与应用 基于SQL Server 2005>介绍数据库基本原理,并以sql server 2005为平台介绍数据库管理系统的应用.全书分为3部分,第l-5章介绍数据库的一般原理,第6-18章介绍sql server 2005的数据管理功能,第19-20章介绍以vb作为前端设计工具.以sql server 2005作为数据库平台开发数据库应用系统的技术.本书最后的附录还给出了一个数据库系统设计过程. 本书由浅入深.循序渐进地介绍各个知识点.书中提供了大量例题,有助

把传统的基于sql的企业信息中心迁移到spark 架构应该考虑的几点思考...[修改中]

把传统的基于sql的企业信息中心迁移到spark 架构应该考虑的几点 * 理由: 赶时髦,  这还不够大条么? > 数据都设计为NO-SQL模式, 只有需要search的才建立2级索引. 就可以了,未必需要rdbms结构. 搜索,和报表可以用spark sql 来进行query. 而且spark提供了内置的mlib和graphX 一般的报表都够用了. > DBA平常有做备份什么的. 那么切换到spark系统后,如何对数据进行备份? > 有没有异地备份的功能?

基于SQL Server搭建主从复制实现读写分离实战演练

一.课程介绍 读写分离(主从同步)从字面意思就可以理解,就是把对数据库的读操作和写操作分离开.读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上.读写分离的基本原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从数据库处理SELECT查询操作.随着系统的业务量不断增长数据多了之后,对数据库的读.写就会很多.分库减少单台数据库的压力.本文以MS SQL Server数据库为例主库负责写数据.读数据.读库仅负责读数据.写