本文为您介绍如何开启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表的所有权限。