hive_server2的权限控制
CDH的core-sit开启: 第一个false表示用系统用户来和hive用户的权限绑定,但经测试并没有生效,所以可以改为true

第二项设置成ALL,表示创建者对其创建的表拥有所有的权限,这样也是
比较合理的。可以不用默认,自定义权限
<property>
<name>
hive.security.authorization.createtable.owner.grants
</name>
<value>select,drop</value>
</property>
beeline的授权命令:
语法: https://www.cloudera.com/documentation/enterprise/6/6.2/topics/sg_hive_sql.html
建立简单的测试例子
create database db_test1;
create table users(id int);
insert into table users values(2);
drop table users;
create external table employee (
name string,
city array<string>,
sex_age struct<sex:string,age:string>,
score map<string,int>
)
row format delimited
fields terminated by '|' #字段之间用|号隔开
collection items terminated by ',' #数组内部用逗号隔开
map keys terminated by ':'; #map的k-v用冒号隔开
授权命令:
登陆一台有hive server2的节点
beeline
!connect jdbc:hive2://localhost:10000
hive hive
dev1 dev1
dev2 dev2
beeline -u "jdbc:hive2://localhost:10000/default"
create role admin;
grant all on server server1 to role admin; #如果授权给其它角色,那么拥有此角色的用户将拥有所有库权限
grant role admin to group hive;
例子:
#建立一个表的select和insert的不同角色,并赋予给dev1,dev2
create role read;
grant select on table test to role read; grant select on table db_test1.users1 to role read;
create role write;
grant insert on table test to role write; grant insert on table db_test1.users1 to role write;
grant role read to group dev1;
grant role write to group dev2;
#建一个库的所有权限和只能查看权限,并赋予不同用户
create role db_test2_all;
grant all on database db_test2 to role db_test2_all;
grant role db_test2_all to group dev2;
create role db_test2_select;
grant select on database db_test2 to role db_test2_select;
grant role db_test2_select to group dev1;
#查看:
SHOW GRANT ROLE write;
SHOW ROLES;
SHOW CURRENT ROLES;
SHOW ROLE GRANT GROUP groupname; #查看用户拥有的权限,group名是和beeline用户名对上,beeline用户名和入口机的系统用户名对上.
SHOW GRANT USER <user name>; #查看用户可以授权的object
SHOW GRANT USER <user name>; #查看用户可以授权的object
show create table test_snappy_01; #查建表语句
desc test_snappy_01; #查表结构
desc formatted test_snappy_01; #查owner是谁
0: jdbc:hive2://localhost:10000> SHOW GRANT USER hive;
+-----------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| database | table | partition | column | principal_name | principal_type | privilege | grant_option | grant_time | grantor |
+-----------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| db_test5 | | | | hive | USER | OWNER | true | 1568026223000 | -- |
| db_test1 | users1 | | | hive | USER | OWNER | true | 1568085570000 | -- |
DROP ROLE <role name>;
REVOKE ROLE <role name> [, <role name>]
FROM GROUP <group name> [,GROUP <group name>]
GRANT
<privilege> [, <privilege> ]
ON <object type> <object name>
TO ROLE <role name> [,ROLE <role name>]
回收权限:
REVOKE ROLE <role name> [, <role name>]
FROM GROUP <group name> [,GROUP <group name>]
例子:
REVOKE ROLE write FROM group dev2;
回收role中的权限:
REVOKE SELECT ON DATABASE coffee_database FROM ROLE write;
例子:
1/ 当把所有权限赋予了一个角色,需要收回.
grant all on server server1 to role write;
drop role write;
然后重新再授权role.
2/ 改动权限:
dev1原来对db_test1的users1只读,改为可写可读
dev2原来对db_test1的users1可写,改为只读
create role read_write_1;
grant select,insert on table db_test1.users1 to role read_write_1;
REVOKE ROLE read FROM group dev1;
grant role read_write_1 to group dev1;
REVOKE ROLE write FROM group dev2;
grant role read to group dev2;
alter的授权:
alter权限不包括在all里,需单独授权
https://docs.cloudera.com/documentation/enterprise/6/6.2/topics/sentry_object_ownership.html

- 无 -默认。在Sentry中禁用对象所有权。新主人的特权不能分配和创建对象并没有得到所有者权限的用户。但是,选择此选项不会影响现有的OWNER特权。
- 具有GRANT的ALL特权 -对象所有者对对象拥有ALL特权,并且可以在对象上转移OWNER特权,还可以授予和撤消对对象的其他特权。OWNER特权被授予创建对象的用户或使用ALTER DATABASE SET OWNER或ALTER TABLE SET OWNER操作的用户。
- ALL特权 -对象所有者对对象拥有ALL特权,但不能将所有者特权转移给另一个用户或角色。OWNER特权被授予创建对象的用户或使用ALTER DATABASE SET OWNER或ALTER TABLE SET OWNER操作的用户。
测试:
CREATE DATABASE test1_db;
SHOW CREATE DATABASE test1_db;
#前提是要db的创建者是db的owner,只有owner能给角色和用户alter的权限
alter database test1_db set owner role test_alter; #把某个库的alter权限赋给某个角色
alter database test1_db set owner user `mingze.yang`; #把某个库的alter权限赋给某个用户
#建好的库,查看owner要在hive的元数据库中查:
#查库的owner,在hdfs上的位置
SELECT * FROM DBS where name='test1_db';
MariaDB [hive]> SELECT * FROM DBS where name='test1_db';
+-------+------+---------------------------------------------------+----------+------------+------------+-------------+
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE | CREATE_TIME |
+-------+------+---------------------------------------------------+----------+------------+------------+-------------+
| 86339 | NULL | hdfs://warehourse/user/hive/warehouse/test1_db.db | test1_db | test_alter | ROLE | 1572579900 |
+-------+------+---------------------------------------------------+----------+------------+------------+-------------+
1 row in set (0.00 sec)
#查库的owner
SELECT name as db_name,
DB_ID, owner_name
FROM DBS where name='test1_db';
+----------+-------+------------+
| db_name | DB_ID | owner_name |
+----------+-------+------------+
| test1_db | 86339 | test_alter |
+----------+-------+------------+
1 row in set (0.00 sec)
SELECT
b1.db_name,
t1.TBL_NAME,
c1.COLUMN_NAME,
c1.TYPE_NAME,
c1.COMMENT,
s1.LOCATION,
from_unixtime(t1.CREATE_TIME,'%Y-%m-%d %H:%i:%S') AS CREATE_TIME
FROM
(SELECT TBL_ID,
CREATE_TIME,
OWNER,
TBL_NAME,
TBL_TYPE,
DB_ID,
SD_ID
FROM TBLS) t1
JOIN
(SELECT name as db_name,
DB_ID
FROM DBS) b1 ON t1.DB_ID=b1.DB_ID
JOIN
(SELECT CD_ID,
COMMENT,
COLUMN_NAME,
TYPE_NAME
FROM COLUMNS_V2) c1
JOIN
(SELECT CD_ID,
LOCATION,
SD_ID
FROM SDS) s1 ON c1.CD_ID=s1.CD_ID
AND t1.SD_ID=s1.SD_ID
where t1.TBL_NAME='dim_oride_city'
and b1.db_name in ('oride_dw')
同事问题解决的例子:
SHOW ROLE GRANT GROUP dev1;
REVOKE ROLE read_write_1 FROM group dev1;
SHOW ROLES;
drop role table_insert;
create role db_test1_insert_table_users_only;
grant insert on table db_test1.users to role db_test1_insert_table_users_only;
grant role db_test1_insert_table_users_only to group dev3;
1、没有drop 权限,但是可以执行drop 操作
0: jdbc:hive2://localhost:10000> drop database db_test1;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
User dev1 does not have privileges for DROPDATABASE
The required privileges: Server=server1->Db=db_test1->action=drop->grantOption=false; (state=42000,code=40000)
2、没有select 权限,但是可以查询
3、有 insert 但是无法插入
beeline:
1、dev3 没有访问db_test1库和表的权限,但是可以访问
show create table test_snappy_01; #查建表语句
desc test_snappy_01; #查表结构
desc formatted test_snappy_01; #查owner是谁
2、对指定表赋权后,库里的所有表全部出现
grant select on table db_test5.test_snappy_01 to role db_test5_select;
grant role db_test5_select to group dev2;
hive_server2的权限控制的更多相关文章
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- MongoDB 安全和访问权限控制
MongoDB的访问控制能够有效保证数据库的安全,访问控制是指绑定Application监听的IP地址,设置监听端口,使用账户和密码登录 一,访问控制的参数 1,绑定IP地址 mongod 参数:-- ...
- WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...
- ASP.NET MVC实现权限控制
这篇分享一下 ASP.NET MVC权限控制.也就是说某一用户登录之后,某一个用户是否有权限访问Controller,Action(操作),视图等 想实现这些功能,需要在数据库创建好几个表:[User ...
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- Appfuse:权限控制
Appfuse的权限控制依赖于Struts的Menu机制,common下的menu.jsp是对菜单顺序的定义,详细的菜单项和菜单链接及权限再menu-config.xml中控制,如下: <Men ...
- .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...
- 浅谈Yii-admin的权限控制
说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等.最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门 ...
- Go语言实战 - revel框架教程之权限控制
一个站点上面最基本都会有三种用户角色,未登录用户.已登录用户和管理员.这一次我们就来看看在revel框架下如何进行权限控制. 因为revel是MVC结构的,每一个url其实都会映射到一个具体的Cont ...
随机推荐
- Python 模块Ⅲ
globals() 和 locals() 函数 根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字. 如果在函数内部调用 locals(),返回的 ...
- Redis常见面试问题及答案
大量key在同一时间过期,注意什么? 如果过期时间过于集中,会导致Redis可能会出现短暂的卡顿现象.严重的话会出现缓存雪崩,一般需要在时间上加一个随机值, 使用过期时间分散一些. Redis分布式锁 ...
- IntelliJ IDEA常用快捷键总结
之前开发项目一直用的是eclipse进行开发,近期在使用IDEA这个工具进行项目开发,之前在eclipse上能使用的快捷键方法放在IDEA上很多都不适用了,因此在此总结一下关于IDEA快捷键的使用方法 ...
- CSS定位——文档流定位
关于CSS的定位机制Ⅰ ㈠概念 对于盒子模型来说,也就是页面元素,这些盒子究竟在页面的什么位置,怎样排列它,那么找到它的位置,确定它的位置,这个就是定位机制所决定的. ㈡分类 文档流, 浮动定位,层定 ...
- 需求-java web 能够实现整个文件夹的上传下载吗?
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- 「SDOI2017」硬币游戏
题目链接 问题分析 首先一个显然的做法就是建出AC自动机,然后高斯消元.但是这样的复杂度是\(O(n^3m^3)\)的. 我们发现其实只需要求AC自动机上\(n\)个状态的概率,而其余的概率是没有用的 ...
- set集合 ,深浅拷贝
一 之前内容的补充 1.join() 将列表转换成字符串 2.split()将字符串转换成列表 3列表和字典在进行For循环时是不可以删除的(准确的说是删除的不彻底) 删除操作需要先创建一个新的空列 ...
- jsvnadmin访问一直登陆 找不到用户
报错:AH01618: user zhangsan not found: /svn/hangzhi 在svnadmin控制台上将用户分好组,不然即使有账户也登不上
- scrum例会报告+燃尽图01
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9954 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名 ...
- MQ常问的问题
目录 1:什么场景使用了mq?直接掉接口不行吗? 2:用消息队列都有什么优点和缺点? 3:Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别? 4:那你们是如何保证消息队列 ...