一、权限访问类型
1、HBase支持做权限访问控制,HBase的权限访问包括以下5种权限
- Read( R ) 允许对某个scope有读取权限
- Write( W ) 允许对某个scope有写入权限
- Execute( X ) 允许对某个scope有执行权限
- Create( C ) 允许对某个scope有建表、删表权限
- Admin( A ) 允许对某个scope做管理操作,如balance、split、snapshot等
2、Scope包含以下几种
- superuser 超级用户,一般为hbase用户,有所有的权限
- global 全局权限,针对所有的HBase表都有权限
- namespace namespace下面的所有表权限都有权限
- table 表级别权限
- columnFamily 列族级别权限
- cell 单元格级别权限
3、命名空间namespace
1)namespace指的是一个表的逻辑分组,同一组中的表有类似的用途。
命名空间的概念为即将到来的多租户特性打下基础:
- 配额管理(Quota Management
(HBASE-8410)):限制一个namespace可以使用的资源,资源包括region和table等; - 命名空间安全管理(Namespace Security Administration
(HBASE-9206)):提供了另一个层面的多租户安全管理; - Region服务器组(Region server groups
(HBASE-6721)):一个命名空间或一张表,可以被固定到一组regionservers上,从而保证了数据隔离性。
2)有两个系统内置的预定义命名空间:
- hbase:系统命名空间,用于包含hbase的内部表。
- default:所有未指定命名空间的表都自动进入该命名空间。
二、HBase的访问控制相关命令
HBase的访问控制相关命令主要包括grant/revoke/user_permission,其中grant表示授权,revoke表示回收权限,user_permission用于查询权限。
1、语法
hbase> grant <user> <permissions> [ @<namespace> [ <table>[ <column family>[ <column qualifier> ] ] ] ]
hbase> revoke <user> <permissions> [ @<namespace> [ <table> [ <column family> [ <column qualifier> ] ]
hbase> user_permission <table>
2、实操
#1 给root用户授权全局的CA
grant 'root','RWXCA'
#2 回收root用户全局的CA
revoke 'root','RWXCA'
#3 给root用户namespace权限
grant 'root','RWXCA','@TRAF_1500000'
#4 给root用户table权限
grant 'root','RWXCA','agatha'
#5 查看所有用户权限
user_permission
#6 查看某个表的权限
user_permission 'agatha'
#7 查看某个namespace的权限
user_permission '@TRAF_1500000'
#8 创建namespace
create_namespace 'ns1'
#9 列出所有namespace
list_namespace
#10 查看namespace
describe_namespace 'ns1'
#11 删除namespace
drop_namespace 'ns1'
#12 在namespace下创建表
create 'ns1:testtable', 'cf1','cf2'
#13 查看namespace下的表
list_namespace_tables 'ns1'
三、报错:Grant无权限(acl文件少了)
1、给权限的时候显示Security features are not available
2、查看master少了个acl表
3、在hbase-site.xml里添加以下配置开启授权acl
<property>
<name>hbase.superuser</name>
<value>niit01</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.rpc.engine</name>
<value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
</property>
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>