本文为您介绍如何开启HBase ACL(授权)。
背景信息
HBase在不开启授权的情况下,任何账号对HBase集群可以进行任何操作,例如disable table、drop table、major compact等。
对于没有Kerberos认证的集群,即使开启了HBase授权,用户也可以伪造身份访问集群服务。所以建议创建高安全模式(即支持Kerberos)的集群,详情请参见Kerberos概述。
基本概念
授权(ACL)就是将对某个范围的资源的操作权限授予某个实体。
在HBase 中,上述对应的三个概念分别为:
某个范围(Scope)的资源
名称
描述
Superuser
超级账号可以进行任何操作,运行HBase服务的账号默认是Superuser,也可以在hbase-site.xml中配置hbase.superuser的值来添加超级账号。
Global
Global Scope拥有集群所有table的Admin权限。
Namespace
在Namespace Scope进行相关权限控制。
Table
在Table Scope进行相关权限控制。
ColumnFamily
在ColumnFamily Scope进行相关权限控制。
Cell
在Cell Scope进行相关权限控制。
操作权限
名称
描述
Read(R)
读取某个Scope资源的数据。
Write (W)
写数据到某个Scope的资源。
Execute (X)
在某个Scope执行协处理器。
Create (C)
在某个Scope创建或删除表等操作。
Admin(A)
在某个Scope进行集群相关操作,如balance、assign等。
某个实体
名称
描述
User
对某个用户授权。
Group
对某个用户组授权。
操作步骤
进入hbase-site.xml页签。
登录EMR on ECS。
在顶部菜单栏处,根据实际情况选择地域和资源组。
在EMR on ECS页面,单击目标集群操作列的集群服务。
在集群服务页面,单击HBase服务区域的配置。
单击hbase-site.xml页签。
在hbase-site.xml页签,新增或修改以下配置项。
Key
Value
hbase.security.authorization
true
hbase.coprocessor.master.classes
org.apache.hadoop.hbase.security.access.AccessController
hbase.coprocessor.region.classes
org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController
hbase.coprocessor.regionserver.classes
org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.token.TokenProvider
重启HBase服务。
单击右上角的 。
在弹出的对话框中,输入执行原因,单击确定。
在确认对话框中,单击确定。
授权(ACL)。
grant授权
grant <user> <permissions> [<@namespace> [<table> [<column family> [<column qualifier>]]]
user和group的授权方式一样,但group需要加一个前缀@
grant 'test','R','tbl1' #给用户test授予表tbl1的读权限。 grant '@testgrp','R','tbl1' #给用户组testgrp授予表tbl1的读权限。
namespace需要加一个前缀@
grant 'test','C','@ns_1' #给用户test授予namespace ns_1的CREATE权限。
revoke回收
revoke 'trafodion' #回收trafodion用户的所有权限。
user_permission查看权限
user_permission 'TABLE_A' #查看TABLE_A表的所有权限。