HBase在不開啟授權的情況下,任何帳號對HBase叢集可以進行任何操作,比如disable table/drop table/major compact等等。

说明

對於沒有Kerberos認證的叢集,即使開啟了HBase授權,使用者也可以偽造身份訪問叢集服務。所以建議建立高安全模式(即支援Kerberos)的叢集,詳見Kerberos簡介

添加配置

在HBase叢集的組態管理頁面選擇HBase > 配置 > hbase-site > 自訂配置

添加如下幾個參數:

<property>
     <name>hbase.security.authorization</name>
     <value>true</value>
</property>
<property>
     <name>hbase.coprocessor.master.classes</name>
     <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
     <name>hbase.coprocessor.region.classes</name>
 <value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
  <name>hbase.coprocessor.regionserver.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>

重啟HBase叢集

在HBase叢集的組態管理頁面選擇HBase > 操作 > RESTART All Components

授權(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 查看許可權