HBase在不开启授权的情况下,任何账号对HBase集群可以进行任何操作,例如disable table、drop table、major compact等。

说明

对于没有Kerberos认证的集群,即使开启了HBase授权,用户也可以伪造身份访问集群服务。所以建议创建高安全模式(即支持 Kerberos)的集群,详情请参见Kerberos 简介

进入配置页面

  1. 登录阿里云E-MapReduce 控制台
  2. 单击上方的集群管理页签。
  3. 集群管理页面,单击相应集群所在行的详情
  4. 在左侧导航栏单击集群服务 > HBase
  5. 单击配置页签。

添加配置

  1. 服务配置区域,单击hbase-site
  2. 单击右侧的自定义配置,设置以下配置。
    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集群

  1. 集群服务 > HBase页面,单击右上角的操作 > 重启 All Components
    1. 执行集群操作对话中中,选择执行范围是否滚动执行失败处理策略,输入执行原因
    2. 单击确定
  2. 单击查看操作历史,当重启HBase操作的状态为成功时,表示重启成功。

授权(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 对某个用户组授权。
  • 授权命令
    • 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回收
    • user_permissions查看权限