目标:

Hive添加用户,并授予不同的权限

  • 用户TRoot:拥有Gdb1、Gdb2超级权限,由root用户授权
  • 用户Auser:由TRoot授权,不能create database/drop database,拥有名为 Gdb1 的 database 所有权限
  • 用户Buser:由用户Auser授权,拥有 Gdb1 的读写权限
  • 用户Cuser:由用户Buser授权,只能够拥有Gdb1的读权限
  • 用户Duser:由TRoot授权,可以同时拥有Gdb1、Gdb2的读写权限
  • 用户Euser:由TRoot授权,只能够拥有Gdb1、Gdb2的读权限

参考文章 

hive增加普通用户,只赋予select权限,无create,drop等权限_1350368559_51CTO博客

大数据Hive系列之Hive用户权限管理_飞翔的博客-CSDN博客_hive查看用户权限

Hive之权限控制 - 清酒浪人 - 博客园

注意:

Hive用户登录,防君子不防小人,建议从入口端配置限制账号登录,本博客不示范设置账号密码教程

Hive账号密码设置登录,参考:

Hive设置连接用户名和密码_奔跑的蜗牛的博客-CSDN博客_hive用户名和密码


准备工作:

需要在各个节点添加用户,原因:

各节点 nodemanager 需要相同的执行用户

Ansible 默认通过 SSH 协议管理机器,所以 Ansible 不需要安装客户端程序在服务器上。您只需要将 Ansible 安装在一台服务器,在 Ansible 安装完后,您就可以去管理控制其它服务器。不需要为它配置数据库,Ansible 不会以 daemons 方式来启动或保持运行状态。Ansible 可以实现以下目标:

  • 自动化部署应用
  • 自动化管理配置
  • 自动化的持续交付
  • 自动化的(AWS)云服务管理。

执行命令

yum -y install ansible  来安装 ansible 插件

配置ansible

[root@node01 ~]# vi /etc/ansible/hosts
[hadoop_root]
node01 ansible_ssh_user=root ansible_ssh_pass=123456
node02 ansible_ssh_user=root ansible_ssh_pass=123456
node03 ansible_ssh_user=root ansible_ssh_pass=123456

建立用户并授权

执行命令

ansible hadoop_root -m shell -a'useradd -s /sbin/nologin TRoot'
ansible hadoop_root -m shell -a'useradd -s /sbin/nologin Auser'
ansible hadoop_root -m shell -a'useradd -s /sbin/nologin Buser'
ansible hadoop_root -m shell -a'useradd -s /sbin/nologin Cuser'
ansible hadoop_root -m shell -a'useradd -s /sbin/nologin Duser'
ansible hadoop_root -m shell -a'useradd -s /sbin/nologin Euser'

注意:

gate节点不需要 /sbin/nologin 否则无法切换到相应的 用户

注意,创建角色和用户授权之前,需要进行如下步骤

遇到问题,如下图

               > show roles;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current user : root is not allowed to list roles. User has to belong to ADMIN role and have it as current role, for this action.
hive (default)> create role superrole;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current user : root is not allowed to add roles. User has to belong to ADMIN role and have it as current role, for this action.
hive (default)> 

解决办法:

1、在hive-site.xml配置:

<property>
        <name>hive.users.in.admin.role</name>
        <value>root</value>
</property>

value值为超级用户

2、在hive端设置

让用户进入admin角色权限

set hive.users.in.admin.role;

set role admin;


1、给TRoot 授权超级权限

grant all on database Gdb1 to user TRoot with grant option;

grant all on database Gdb2 to user TRoot with grant option;

2、给Auser 授权Gdb1权限

TRoot用户登录执行:

grant all on database Gdb1 to user Auser with grant option;

 3、给Buser 授权

Auser用户登录执行:

grant select on database Gdb1 to user Buser;
grant insert on database Gdb1 to user Buser;
grant update on database Gdb1 to user Buser;
grant delete on database Gdb1 to user Buser;

4、给Cuser 授权

Buser用户登录执行:

grant select on database Gdb1 to user Cuser;

5、给Duser授权

TRoot用户权限 登录执行

grant select on database Gdb2 to user Duser;
grant insert on database Gdb2 to user Duser;
grant update on database Gdb2 to user Duser;
grant delete on database Gdb2 to user Duser;

6、给Euser授权

TRoot用户登录执行

grant select on database Gdb1 to user Duser;
grant select on database Gdb2 to user Duser;


验证

在对应用户执行以下命令即可验证

-- 查看指定用户在所有库下面的权限

show grant user TRoot;

-- 查看指定用户在某个库的权限

show grant user TRoot on database Gdb1;

Cuser不能够访问Gdb2的表

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐