開啟HBase ACL
本文為您介紹如何開啟HBase ACL(授權(quán))。
背景信息
HBase在不開啟授權(quán)的情況下,任何賬號對HBase集群可以進行任何操作,例如disable table、drop table、major compact等。
對于沒有Kerberos認證的集群,即使開啟了HBase授權(quán),用戶也可以偽造身份訪問集群服務(wù)。所以建議創(chuàng)建高安全模式(即支持Kerberos)的集群,詳情請參見Kerberos概述。
基本概念
授權(quán)(ACL)就是將對某個范圍的資源的操作權(quán)限授予某個實體。
在HBase 中,上述對應(yīng)的三個概念分別為:
某個范圍(Scope)的資源
名稱
描述
Superuser
超級賬號可以進行任何操作,運行HBase服務(wù)的賬號默認是Superuser,也可以在hbase-site.xml中配置hbase.superuser的值來添加超級賬號。
Global
Global Scope擁有集群所有table的Admin權(quán)限。
Namespace
在Namespace Scope進行相關(guān)權(quán)限控制。
Table
在Table Scope進行相關(guān)權(quán)限控制。
ColumnFamily
在ColumnFamily Scope進行相關(guān)權(quán)限控制。
Cell
在Cell Scope進行相關(guān)權(quán)限控制。
操作權(quán)限
名稱
描述
Read(R)
讀取某個Scope資源的數(shù)據(jù)。
Write (W)
寫數(shù)據(jù)到某個Scope的資源。
Execute (X)
在某個Scope執(zhí)行協(xié)處理器。
Create (C)
在某個Scope創(chuàng)建或刪除表等操作。
Admin(A)
在某個Scope進行集群相關(guān)操作,如balance、assign等。
某個實體
名稱
描述
User
對某個用戶授權(quán)。
Group
對某個用戶組授權(quán)。
操作步驟
進入hbase-site.xml頁簽。
登錄EMR on ECS。
在頂部菜單欄處,根據(jù)實際情況選擇地域和資源組。
在EMR on ECS頁面,單擊目標(biāo)集群操作列的集群服務(wù)。
在集群服務(wù)頁面,單擊HBase服務(wù)區(qū)域的配置。
單擊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服務(wù)。
單擊右上角的 。
在彈出的對話框中,輸入執(zhí)行原因,單擊確定。
在確認對話框中,單擊確定。
授權(quán)(ACL)。
grant授權(quán)
grant <user> <permissions> [<@namespace> [<table> [<column family> [<column qualifier>]]]
user和group的授權(quán)方式一樣,但group需要加一個前綴@
grant 'test','R','tbl1' #給用戶test授予表tbl1的讀權(quán)限。 grant '@testgrp','R','tbl1' #給用戶組testgrp授予表tbl1的讀權(quán)限。
namespace需要加一個前綴@
grant 'test','C','@ns_1' #給用戶test授予namespace ns_1的CREATE權(quán)限。
revoke回收
revoke 'trafodion' #回收trafodion用戶的所有權(quán)限。
user_permission查看權(quán)限
user_permission 'TABLE_A' #查看TABLE_A表的所有權(quán)限。