Hbase 之访问控制

本文介绍了Hbase的权限控制,包括库、表、列簇和列级别的READ、WRITE、CREATE、ADMIN四种权限。AccessController作为拦截入口,同时是MasterObserver和RegionObserver。AccessControlLists管理权限列表,TableAuthManager负责用户权限检测。通过几个实例展示了Hbase的权限访问控制实现。
摘要由CSDN通过智能技术生成

权限控制范围包括库级别(全局)、表级别、列簇级别和列级别,目前总共有五种级别,分别是  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;
		        }
		        }
		     );
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值