- 关键类和方法:
- HBaseAdmin:用于管理HBase表等相关操作。在HBase 1.x版本中,获取
HBaseAdmin
实例可以通过Configuration
和HBaseAdmin
的构造函数,如Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf);
在HBase 2.x版本中,建议使用Connection
来获取HBaseAdmin
,即Connection connection = ConnectionFactory.createConnection(conf); HBaseAdmin admin = (HBaseAdmin)connection.getAdmin();
- AccessController:用于处理权限相关操作,通过
admin.getAccessController()
获取其实例。
- 关键方法:
- grant:用于赋予权限,方法签名为
void grant(String user, byte[] tableName, byte[] family, byte[] qualifier, Permission perm)
,其中user
为用户名,tableName
为表名(字节数组形式),family
为列族(字节数组形式,可为null
),qualifier
为列限定符(字节数组形式,可为null
),perm
为权限类型(如Permission.Action.READ
,Permission.Action.WRITE
等)。
- revoke:用于收回权限,方法签名为
void revoke(String user, byte[] tableName, byte[] family, byte[] qualifier, Permission perm)
,参数含义与grant
方法类似。
- 赋予读权限大致流程:
- 创建
Configuration
实例并加载HBase配置,如Configuration conf = HBaseConfiguration.create();
- 获取
HBaseAdmin
实例,如Connection connection = ConnectionFactory.createConnection(conf); HBaseAdmin admin = (HBaseAdmin)connection.getAdmin();
- 获取
AccessController
实例,AccessController accessController = admin.getAccessController();
- 调用
grant
方法赋予读权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.READ);
accessController.grant(user, tableName, null, null, perm);
- 赋予写权限大致流程:
- 同样先创建
Configuration
,获取HBaseAdmin
和AccessController
实例。
- 调用
grant
方法赋予写权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.WRITE);
accessController.grant(user, tableName, null, null, perm);
- 收回读权限大致流程:
- 创建相关实例(
Configuration
,HBaseAdmin
,AccessController
)。
- 调用
revoke
方法收回读权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.READ);
accessController.revoke(user, tableName, null, null, perm);
- 收回写权限大致流程:
- 创建相关实例。
- 调用
revoke
方法收回写权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.WRITE);
accessController.revoke(user, tableName, null, null, perm);