权限控制范围包括库级别(全局)、表级别、列簇级别和列级别,目前总共有五种级别,分别是 READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A') 其中Exec 目前没有使用,CREATE,ADMIN只涉及库级别和表级别,列簇级别和列级别只涉及到READ和WRITE权限。
Hbase 提供了相应的api 来操作用户的访问控制。涉及的类主要有以下几个
org.apache.hadoop.hbase.security.access.AccessController
这是对所有访问进行拦截的入口,它既是MasterObserver又是RegionObserver,言下之意,它能拦截所有的操作
org.apache.hadoop.hbase.security.access.AccessControlLists
管理由AccessController 授权的权限列表
org.apache.hadoop.hbase.security.access.TableAuthManager
负责对用户进行权限检测。该类的实例缓存了所有的用户Permission。
下面举几个简单的例子。来展示下Hbase 的权限访问控制是如何实现的
public static void grant(final String userName,final String tableName,final String columnFamily,final String qulifier)
throws IOException,
InterruptedException{
User user = User.create(UserGroupInformation.createRemoteUser("root"));
System.out.println("user.isSecurityEnabled:"+User.isSecurityEnabled());
user.runAs(new PrivilegedExceptionAction<Object>(){
@Override
public Object run()throws Exception{
HTable acl = new HTable(conf, AccessControlLists.ACL_TABLE_NAME);
try {
BlockingRpcChannel service = acl.coprocessorService(Bytes.toBytes("scores"));
AccessControlService.BlockingInterface protocol =
AccessControlService.newBlockingStub(service);
ProtobufUtil.grant(protocol, userName, TableName.valueOf(tableName),
Bytes.toBytes(columnFamily), Bytes.toBytes(qulifier), Action.READ,Action.WRITE);
} finally {
acl.close();
}
return null;
}
}
);
}
本文介绍了Hbase的权限控制,包括库、表、列簇和列级别的READ、WRITE、CREATE、ADMIN四种权限。AccessController作为拦截入口,同时是MasterObserver和RegionObserver。AccessControlLists管理权限列表,TableAuthManager负责用户权限检测。通过几个实例展示了Hbase的权限访问控制实现。
855

被折叠的 条评论
为什么被折叠?



