cdh 中给root 赋值 hdfs 超级用户权限
CDH环境下Hadoop平台最高权限用户是hdfs,属于supergroup组。默认HDFS会开启权限认证,所以操作时,需要将root用户切换到hdfs用户,否则会报错。
在root 用户下
spark-shell 和hdfs 等命令没有读写 hdfs 系统上数据的权限 每次都切换到 hdfs 用户下执行存在问题,还有在特定单独安装组件可能要求用root用户存在进程无法读取hdfs 上数据的情况,但是关闭权限检查,任何用户都可以操作HDFS数据,数据安全性又没有保障,所以使用将用户添加到supergroup组的方式。
通常会把 root 或者需要的用户添加到 supergroup组,但Linux下默认是没有supergroup组。
#Linux下默认是没有supergroup组的
#hadoop:x:994:hdfs,mapred,yarn
cat /etc/group
#查看hdfs用户的组是hadoop
#hdfs:x:995:992:Hadoop HDFS:/var/lib/hadoop-hdfs:/sbin/nologin
cat /etc/passwd
所以,先在Linux添加supergroup组,把root用户添加到supergroup里,再同步权限到HDFS。
#Linux添加supergroup组
#supergroup:x:1003:
groupadd supergroup
#将root添加到supergroup
#supergroup:x:1003:root
usermod -a -G supergroup root
#同步系统权限信息到HDFS,会自动同步其他节点权限
#Refresh user to groups mapping successful for cdh-master/192.168.100.45:8020
#Refresh user to groups mapping successful for cdh-slave01/192.168.100.46:8020
然后再 hdfs 用户下同步 到其它节点
hdfs dfsadmin -refreshUserToGroupsMappings
最后验证
hive 中为用户(root)添加 所有权限
确保cdh 中已经配置开通相应的权限控制
在Cloudera Manager中配置
hive-site.xml 的 Hive 客户端高级配置代码段(安全阀)
hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)
本人任务为root用户增加权限的最好方式是通过hive 客户端直接赋值所有权限(待验证 欢迎推荐其它方式)
切换到超级用户hdfs 直接客户端 方式 hive
hive中查看用户权限
注意:
‘hive 用户权限分配 一般可以通过两方面
1、直接对不同的用户赋权。
2、通过对hive中的角色赋权(一般可以通过hue)
hue 一般先赋值操作到一个角色 然后将这个角色的权限 在赋值个用户的方式。
如:(1)\hue 这里创建了角色 role_select
CREATE ROLE role_select;
grant SELECT,SHOW_DATABASE on database default to role role_select;
(2)、hue 中使用超级用户(hdfs)
完成
应用hive2的beeline命令行工具登录到hive后:
我们直接可以对相关用户和角色添加相关权限 create,drop ,select,alter,delete等
操作(opera) 解释
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 允许用户查看可用的数据库
一般情况下的操作是 将权限归类 按照合适的粒度 分配给角色 然后再将角色赋值给用户账号,因为账号是Linux系统级的不太好分的粒度那么清楚。
下面是赋值权限的一些命令操作:
基于角色
--创建和删除角色
create role role_name;
drop role role_name;
--展示所有roles
show roles
--赋予角色权限
grant select on database zfs_test to role zfs_role;
grant select on [table] employee to role user1_1;
--查看角色权限
show grant role role_name on database db_name;
show grant role role_name on [table] t_name;
--角色赋予用户
grant role role_name to user user_name
--回收角色权限
revoke select on database db_name from role role_name;
revoke select on [table] t_name from role role_name;
--查看某个用户所有角色
show role grant user user_name;
--查看用户被赋予的角色
show role grant user user1_1;
--查看所有权限的分配情况
show grant
--查看单个角色的权限分配情况
show grant role zfs_role;
基于用户
GRANT CREATE ON DATABASE default TO user mllib;
GRANT SELECT on table authorization_test to user mllib;
GRANT DROP on table authorization_test to user mllib;
GRANT ALL on table authorization_test to user mllib;
查看权限分配
SHOW GRANT user mllib ON DATABASE default;
SHOW GRANT group test_role ON DATABASE default;
删除权限
revoke all on database spark from user mllib;
三、可以通过修改元数据表控制表权限
登录hive元数据库,可以发现以下表:
Db_privs:记录了User/Role在DB上的权限
Tbl_privs:记录了User/Role在table上的权限
Tbl_col_privs:记录了User/Role在table column上的权限
Roles:记录了所有创建的role
Role_map:记录了User与Role的对应关系
Hive在mysql上的元数据表主要分为:Database相关、Table相关、数据存储相关SDS、COLUMN相关、SERDE相关(序列化)、Partition相关(分区)、SKEW相关(数据倾斜)、BUCKET相关(分桶)、PRIVS相关(权限管理),对数据库-数据表、用户有相应关系体现。其中TBL_PRIVS存储了表/视图的授权信息,见如下数据字典:
再看mysql中存储Hive中所有数据库基本信息的表DBS数据字典: