MST

星途 面试题库

面试题:HBase中HBaseAdmin如何管理用户对表的读写权限

在HBase的HBaseAdmin类相关操作里,阐述如何实现对用户赋予或收回对特定表的读、写权限,需要说明涉及到的关键方法和大致流程。
28.9万 热度难度
数据库Hbase

知识考点

AI 面试

面试题答案

一键面试
  1. 关键类和方法
    • HBaseAdmin:用于管理HBase表等相关操作。在HBase 1.x版本中,获取HBaseAdmin实例可以通过ConfigurationHBaseAdmin的构造函数,如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.READPermission.Action.WRITE等)。
      • revoke:用于收回权限,方法签名为void revoke(String user, byte[] tableName, byte[] family, byte[] qualifier, Permission perm),参数含义与grant方法类似。
  2. 赋予读权限大致流程
    • 创建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);
  1. 赋予写权限大致流程
    • 同样先创建Configuration,获取HBaseAdminAccessController实例。
    • 调用grant方法赋予写权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.WRITE);
accessController.grant(user, tableName, null, null, perm);
  1. 收回读权限大致流程
    • 创建相关实例(ConfigurationHBaseAdminAccessController)。
    • 调用revoke方法收回读权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.READ);
accessController.revoke(user, tableName, null, null, perm);
  1. 收回写权限大致流程
    • 创建相关实例。
    • 调用revoke方法收回写权限,例如:
String user = "yourUserName";
byte[] tableName = Bytes.toBytes("yourTableName");
Permission perm = new Permission(Permission.Action.WRITE);
accessController.revoke(user, tableName, null, null, perm);