HBase的ACL说明
HBase版本:1.1.2
前言
该文只是对Kerberos应用部分中HBase使用的一个补充,主要介绍了HBase ACL的使用。
一、HBase ACL
HBase ACL 的全称为 HBase Access Control List ,它可以实现对各 User 、 Group 、 Namespace 、 Table 、 Column Family 、 Column Qualifier 层级的数据权限控制。
我们可以使用 grant 命令对上述层级进行授权。
二、启用HBase自身权限控制
HBase 在不开启授权的情况下,任何账号对 HBase 集群可以进行任何操作,比如 disable table 、 drop table 等等。
HBase 的安全模块包括两个部分,一个是 Enable Authentication ,一个是 Enabled Authorization 。前者是在开启 Kerberize 集群( Kerberos )的时候会用到(感兴趣的可以点击前往查看);后者在开启 HBase 自身权限控制的时候会用到。今天主要说一下后者的使用,如图所示:
将值修改为 Native ,我们注意到 hbase-site 会有三个配置提示被修改,点击确定并重启 HBase 服务:
hbase-site.xml 文件会被修改:
1 | <property> |
如果没有使用 Ambari 统一管理服务的话,可以修改 /usr/hdp/2.6.4.0-91/hbase/conf/hbase-site.xml 文件,然后重启 HBase 服务。
按照上述操作, HBase ACL 开启成功。
三、HBase ACL权限控制说明
HBase 访问级别是相互独立授予的,并允许在给定范围内进行不同类型的操作。
1. 操作级别说明
操作级别 | 说明 |
---|---|
Read ( R ) | 读取某个Scope资源的数据 |
Write ( W ) | 在某个Scope的资源内写入数据 |
Execute ( X ) | 在某个Scope执行协处理器 |
Create ( C ) | 在某个Scope创建/删除表等操作 |
Admin ( A ) | 在某个Scope进行集群相关操作,例如在给定的范围内平衡集群或分配区域。该权限可对命名空间进行操作 |
2. 某个范围(Scope)的说明
范围 | 说明 |
---|---|
Superuser | 超级账号可以进行任何操作,运行HBase服务的账号默认是hbase。也可以通过在hbase-site.xml中配置hbase.superuser的值可以添加超级账号 |
Global | Global Scope拥有集群所有table的Admin权限 |
Namespace | 在Namespace Scope进行相关权限控制 |
Table | 在Table Scope进行相关权限控制 |
Column Family | 在Column Family Scope进行相关权限控制 |
Column Qualifier | 在Column Qualifier Scope进行相关权限控制 |
3. 实体说明
实体 | 说明 |
---|---|
User | 对某个用户授权 |
GROUP | 对某个用户组授权 |
四、设置权限
授权就是将对 [某个范围的资源] 的 [操作权限] 授予[某个实体]
设置 hbase 权限的命令格式:
1 | grant <user> <permissions> [<@namespace> [<table> [<column family> [<column qualifier>]]] |
这里我们新建一个 test 用户,来为 test 用户设置一下权限。
新建 Linux 用户: useradd test
1 | [root@xxxxx ~]# useradd test |
查看进入 hbase shell 的当前用户:
1 | hbase(main):001:0> whoami |
另外新建一个 shell 客户端,切换到 HBase 的超级用户下,默认为 hbase 。
1. 创建、查看、删除namespace权限
使用超级用户赋予 test 用户创建、查看、删除 namespace 的权限
1 | Global范围的授权 |
使用 test 用户创建、查看、删除 namespace
1 | 创建、查看、删除namespace |
2. 查看权限(用户拥有ADMIN级别的权限才可使用该命令)
1 | user_permission '.*' |
3. 创建/删除表
使用超级用户赋予 test 用户在 test_ns 内创建/删除表的权限。
1 | Namespace范围的授权 |
查看权限:
1 | user_permission '@.*' |
使用 test 用户创建/删除表:
1 | 创建表 |
这时候的 test_ns:hbase_1102 表的权限为:
4. 为test用户设置表权限
首先为了演示权限的控制,给 test_ns:hbase_1102 表创造一些数据:
插入数据
1 | hbase(main):048:0> put 'test_ns:hbase_1102', '001','cf1:name','Tom' |
读取数据
1 | scan 'test_ns:hbase_1102' |
1. 只读列族权限
使用超级用户为 test 用户设置 test_ns:hbase_1102 表的 cf1 的只读权限
1 | Column Family范围的授权 |
这样我们的效果预期是使用scan ‘test_ns:hbase_1102’的时候,仅显示列族cf1的相关信息,但是是这样的吗?请继续往下看:
1 | 查看test_ns:hbase_1102的权限 |
很明显, test_ns:hbase_1102 表有两条关于 test 用户的权限说明,它的权限层级不同的时候是不会被影响的。假如我们要设置为只读 cf1 这个列族信息的话,需要将第一条相关 test 的权限进行回收:
1 | revoke命令格式 |
使用 HBase 超级用户执行:
1 | revoke回收权限 |
这样的话,就做到了控制 test 用户只读列族 cf1 的信息了,使用 test 用户执行:
1 | scan 'test_ns:hbase_1102' |
2. 只读列族中某列权限
使用 HBase 超级用户执行:
1 | revoke 'test','test_ns:hbase_1102','cf1' |
使用 test 用户执行:
1 | scan 'test_ns:hbase_1102' |
符合预期设想。
五、总结
HBase ACL 的开启还是很有必要的,它能细粒化地控制用户对 HBase 数据的操作。根据 HBase ACL 的实战演练,需要注意 HBase ACL 的范围( Scope )权限是互不干扰的,如果需要达到预期的权限,建议多使用 user_permission 命令查看权限。如果权限没有达到预期,建议再 revoke 一下。
本文主要讲解了 HBase ACL 的说明使用:
- ACL 权限控制说明
- 使用 grant 命令
- 使用 revoke 命令
如何查看某表的权限
HBase ACL 相对来说比较简单,但也呼吁大家动手实践一下~
备注:实现不进入hbase shell即可执行hbase shell语句:
1、将hbase shell的命令写入到文件里面,例如:hbase shell ./command_test.txt
2、echo “list” | hbase shell
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2019/01/28/HBase/HBase的ACL说明.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)