Hbase 之访问控制

权限控制范围包括库级别(全局)、表级别、列簇级别和列级别,目前总共有五种级别,分别是  READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A') 其中Exec 目前没有使用,CREATE,ADMIN只涉及库级别和表级别,列簇级别和列级别只涉及到READWRITE权限。

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;
		        }
		        }
		     );
	}

 

猜你喜欢

转载自ziye520.iteye.com/blog/2240621