hive SQL Standard Based Hive Authorization 权限自定义

原创
2016/07/19 17:09
阅读数 464

hive 0.13之后,hive的授权方式引进了SQL Standard Based Hive Authorization,该授权方式直接从sql语法级别进行权限的控制,更加的准确和高效。另外的权限控制方式详见 --- LanguageManual Authorization

SQL Standard Based Hive Authorization中的权限控制列表如下,其规定了所有操作所需要的权限,但是有些权限对于我们的业务或多或少存在不适合的情况,所以要做适当的修改,完整介绍 --- SQL Standard Based Hive Authorization

Alt text

这个表的对应关系其实是存在Operation2Privilege这个类里面的,完整的对应关系要在这个类里才看的到,里面有些权限,例如HiveOperationType.ADD(就是add jar test.jar这样的操作)对应的是ADMIN_PRIV_AR权限的,也就是管理员权限,而要临时添加udf函数,这个add权限不能只对管理员开放,而要对普通用户都开放才行。这里只要修改 op2Priv.put(HiveOperationType.ADD, PrivRequirement.newIOPrivRequirement(ADMIN_PRIV_AR, ADMIN_PRIV_AR));op2Priv.put(HiveOperationType.ADD, PrivRequirement.newIOPrivRequirement(null, null)); 即可。

同理HiveOperationType.DFS(即在hive里执行dfs命令)、HiveOperationType.CREATEFUNCTION(create function)、HiveOperationType.DROPFUNCTION(drop function)都可以这样修改。

这里其实可以不用修改hive代码的方式实现的,参照hive SQL Standard Based Hive Authorization 权限自定义(二),这里就不修改原始的内容了,在这里插一笔。 修改完成后,用maven打包hive-exec这个子工程,会生成hive-exec-xxx.jar(xxx为版本号),覆盖HIVE_HOME/lib下对应的jar包,重启hiveserver2即可。 注:本文hive版本基于1.1.0 理论上0.13以后均适用

PS:上面的权限类别(Select,Insert.Update,Delete等权限)如果还不能满足业务需求的话,就要新增权限配置,同时也要修改权限的赋予和回收的代码了,上述用到的权限如下

  private static SQLPrivTypeGrant[] OWNER_PRIV_AR = arr(SQLPrivTypeGrant.OWNER_PRIV);
  private static SQLPrivTypeGrant[] SEL_NOGRANT_AR = arr(SQLPrivTypeGrant.SELECT_NOGRANT);
  private static SQLPrivTypeGrant[] SEL_GRANT_AR = arr(SQLPrivTypeGrant.SELECT_WGRANT);
  private static SQLPrivTypeGrant[] ADMIN_PRIV_AR = arr(SQLPrivTypeGrant.ADMIN_PRIV);
  private static SQLPrivTypeGrant[] INS_NOGRANT_AR = arr(SQLPrivTypeGrant.INSERT_NOGRANT);
  private static SQLPrivTypeGrant[] DEL_NOGRANT_AR = arr(SQLPrivTypeGrant.DELETE_NOGRANT);
  private static SQLPrivTypeGrant[] UPD_NOGRANT_AR = arr(SQLPrivTypeGrant.UPDATE_NOGRANT);
  private static SQLPrivTypeGrant[] OWNER_INS_SEL_DEL_NOGRANT_AR =
      arr(SQLPrivTypeGrant.OWNER_PRIV,
          SQLPrivTypeGrant.INSERT_NOGRANT,
          SQLPrivTypeGrant.DELETE_NOGRANT,
          SQLPrivTypeGrant.SELECT_NOGRANT);

对应的就是上面图表里的所有权限,可以看到SEL有两个权限SEL_NOGRANT_ARSEL_GRANT_AR分别对应图中Select权限的"Y"和"Y+G"

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部