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

背景信息

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

进入配置页面

  1. 登录阿里云E-MapReduce控制台
  2. 在顶部菜单栏处,根据实际情况选择地域(Region)和资源组
  3. 单击上方的集群管理页签。
  4. 集群管理页面,单击相应集群所在行的详情
  5. 在左侧导航栏单击集群服务 > HBase
  6. 单击配置页签。

添加配置

  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
  2. 执行集群操作对话框设置相关参数,然后单击确定
    单击右上角查看操作历史查看任务进度,等待任务完成。

授权(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回收
      revoke 'trafodion'  #回收trafodion用户的所有权限。
    • user_permission查看权限
      user_permission 'TABLE_A'  #查看TABLE_A表的所有权限。