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 |
|
|
- [Hive - LanguageManual ] ]SQL Standard Based Hive Authorization
Status of Hive Authorization before Hive 0.13 SQL Standards Based Hive Authorization (New in Hive 0. ...
- Hive Authorization
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization https://www.cloudera.c ...
- 大数据开发实战:离线大数据处理的主要技术--Hive,概念,SQL,Hive数据库
1.Hive出现背景 Hive是Facebook开发并贡献给Hadoop开源社区的.它是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处 ...
- Hive、Spark SQL、Impala比较
Hive.Spark SQL.Impala比较 Hive.Spark SQL和Impala三种分布式SQL查询引擎都是SQL-on-Hadoop解决方案,但又各有特点.前面已经讨论了Hi ...
- 基于SQL Server 2008 Service Broker构建企业级消息系统
注:这篇文章是为InfoQ 中文站而写,文章的地址是:http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroke ...
- 基于SQL的日志分析工具myselect
基本介绍 程序开发者常常要分析程序日志,包括自己打印的日志及使用的其他软件打印的日志,如php,nginx日志等,linux环境下分析日志有一些内置命令能够使用,如grep,sort,uniq,awk ...
- SQL Server On Linux:基于实际项目案例,总结功能支持情况及相关问题解决方案,讲如何快速完成迁移
上个月,有个朋友问我说Sql Sever向Mysql迁移有什么好的经验分享,他们公司客户明确提出不再提供Windows服务器,现在计划Mysql迁移.我说Mysql迁移成本太高了,不妨可以了解一下SQ ...
- 不care工具,在大数据平台中Hive能自动处理SQL
摘要:有没有更简单的办法,可以直接将SQL运行在大数据平台? 本文分享自华为云社区<Hive执行原理>,作者: JavaEdge . MapReduce简化了大数据编程的难度,使得大数据计 ...
- 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...
随机推荐
- Qt 学习之路 :Qt 模块简介
Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改.Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中.Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化.本节 ...
- HDU 4442 Physical Examination(关于贪心排序)
这个题目用贪心来做,关键是怎么贪心最小,那就是排序的问题了. 加入给定两个数a1, b1, a2, b2.那么如果先选1再选2的话,总的耗费就是a1 + a1 * b2 + a2; 如果先选2再选1, ...
- My way to Python - Day05 - 面向对象
思维导图
- 用CSS创建小三角形问题(笔试题常考)
笔试题中经常遇到用CSS实现某个Div边框添加三角形问题,掌握一点,合理利用div的边框,当div有宽有高时,边框就是不起眼的边框,当div的宽高为0时,边框就是一个小方块,把剩下的三个边透明就是神奇 ...
- 关于C#编程中引用与值类型赋值的一些容易犯错的地方
值类型与引用类型的区别在于:值类型在赋值的时候是拷贝值,引用类型在赋值的时候的拷贝引用.记住这一个原则,我们再来分析一些具体情况: PointStruct pt1 = ,); PointStruct ...
- css margin collapse
css中存在margin collapse,即边界塌陷或边界重叠. http://www.w3cplus.com/css/understanding-bfc-and-margin-collapse.h ...
- C# 根据IP查询地址归属地
必备文件:IPLocation.dll.QQWry.Dat 下载地址:http://pan.baidu.com/s/1jG1dlOy (可百度下载) 之前有过将 QQWry.Dat 转为 Access ...
- phalcon的一些中文手册和帮助文档地址收集
1:中文官方网站:http://phalconphp.com/zh/ 挺好可以好好看文档 可安装http://bullsoft.org/phalcon-docs/这个去查找,这是个部分中文的手册! P ...
- 安装mysql-python报错
运行: pip install mysql-python报错如下: Downloading/unpacking MYSQL-python Downloading MySQL-python-1.2.5. ...
- window.location.href/replace/reload()--页面跳转+替换+刷新
一.最外层top跳转页面,适合用于iframe框架集 top.window.location.href("${pageContext.request.contextPath}/Login_g ...