Hive Privilege 是 Hive 权限系统的基础。

PrivilegeType 权限类型

权限类型的枚举,以及根据 token 和名称返回 PrivilegeType 的静态方法。

public enum PrivilegeType {ALL(HiveParser.TOK_PRIV_ALL, "All"),ALTER_DATA(HiveParser.TOK_PRIV_ALTER_DATA, "Update"),ALTER_METADATA(HiveParser.TOK_PRIV_ALTER_METADATA, "Alter"),CREATE(HiveParser.TOK_PRIV_CREATE, "Create"),DROP(HiveParser.TOK_PRIV_DROP, "Drop"),LOCK(HiveParser.TOK_PRIV_LOCK, "Lock"),SELECT(HiveParser.TOK_PRIV_SELECT, "Select"),SHOW_DATABASE(HiveParser.TOK_PRIV_SHOW_DATABASE, "Show_Database"),INSERT(HiveParser.TOK_PRIV_INSERT, "Insert"),DELETE(HiveParser.TOK_PRIV_DELETE, "Delete"),UNKNOWN(null, null);private final String name;private final Integer token;PrivilegeType(Integer token, String name){this.name = name;this.token = token;}@Overridepublic String toString(){return name == null ? "unkown" : name;}public Integer getToken() {return token;}private static Map<Integer, PrivilegeType> token2Type;private static Map<String, PrivilegeType> name2Type;// 根据 token 返回权限类型public static PrivilegeType getPrivTypeByToken(int token) {// omit implements.}// 根据名称返回权限类型public static PrivilegeType getPrivTypeByName(String privilegeName) {// omit implements.}
}

PrivilegeScope 权限的作用范围

定义了 4 种范围:用户级别,数据库级别,表级别和字段级别。定义了两个枚举集合:ALLSCOPE 是所有范围,ALLSCOPE_EXCEPT_COLUMN 是除字段外的其他范围。

public enum PrivilegeScope {// 用户级别USER_LEVEL_SCOPE((short) 0x01), // 数据库级别DB_LEVEL_SCOPE((short) 0x02), // 表级别TABLE_LEVEL_SCOPE((short) 0x04), // 字段级别COLUMN_LEVEL_SCOPE((short) 0x08);private short mode;private PrivilegeScope(short mode) {this.mode = mode;}public short getMode() {return mode;}public void setMode(short mode) {this.mode = mode;}public static EnumSet<PrivilegeScope> ALLSCOPE = EnumSet.of(PrivilegeScope.USER_LEVEL_SCOPE, PrivilegeScope.DB_LEVEL_SCOPE,PrivilegeScope.TABLE_LEVEL_SCOPE, PrivilegeScope.COLUMN_LEVEL_SCOPE);public static EnumSet<PrivilegeScope> ALLSCOPE_EXCEPT_COLUMN = EnumSet.of(PrivilegeScope.USER_LEVEL_SCOPE, PrivilegeScope.DB_LEVEL_SCOPE,PrivilegeScope.TABLE_LEVEL_SCOPE);
}

Privilege 权限

每个权限有权限类型和权限支持的范围两个变量。Privilege 不是枚举类型,但是定义了若干个静态变量。

public class Privilege {private PrivilegeType priv;private EnumSet<PrivilegeScope> supportedScopeSet;private Privilege(PrivilegeType priv, EnumSet<PrivilegeScope> scopeSet) {super();this.priv = priv;this.supportedScopeSet = scopeSet;}public Privilege(PrivilegeType priv) {super();this.priv = priv;}public Privilege() {}public static Privilege ALL = new Privilege(PrivilegeType.ALL,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege ALTER_METADATA = new Privilege(PrivilegeType.ALTER_METADATA,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege ALTER_DATA = new Privilege(PrivilegeType.ALTER_DATA,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege CREATE = new Privilege(PrivilegeType.CREATE,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege DROP = new Privilege(PrivilegeType.DROP,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege LOCK = new Privilege(PrivilegeType.LOCK,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege SELECT = new Privilege(PrivilegeType.SELECT,PrivilegeScope.ALLSCOPE);public static Privilege INSERT = new Privilege(PrivilegeType.INSERT,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege DELETE = new Privilege(PrivilegeType.DELETE,PrivilegeScope.ALLSCOPE_EXCEPT_COLUMN);public static Privilege SHOW_DATABASE = new Privilege(PrivilegeType.SHOW_DATABASE,EnumSet.of(PrivilegeScope.USER_LEVEL_SCOPE));}

HiveOperation

HiveOperation 定义了所有的 Hive 操作。每个操作有操作名,需要的输入权限和输出权限,是否允许在事务中,需要开启事务。
如 COMMIT,ROLLBACK 允许在事务中,并且需要开启事务。
SHOWTABLES,SHOWCOLUMNS,SHOW_TABLESTATUS,SHOW_TBLPROPERTIES,SHOWVIEWS,SHOWLOCKS,SHOW_GRANT,SHOW_ROLES,SET_AUTOCOMMIT 允许在事务中,但是不需要开启事务。


enum HiveOperation {private String operationName;private Privilege[] inputRequiredPrivileges;private Privilege[] outputRequiredPrivileges;private final boolean allowedInTransaction;private final boolean requiresOpenTransaction;
}

HiveAuthenticationProvider

HiveAuthenticationProvider 提供认证信息,包含用户名和组名。
子类有 :

  • HadoopDefaultAuthenticator 默认的,使用 UserGroupInformation 获得用户名和组名。

  • SessionStateConfigUserAuthenticator 使用当前会话 SessionState 获取用户名,组名为空 list。在hive 终端里,执行set user.name=xxx,可以改变当前会话的用户,基本用于测试。

  • SessionStateUserAuthenticator 使用 sessionState.getUserName(); 返回用户名,组名为空 list。

public interface HiveAuthenticationProvider extends Configurable{public String getUserName();public List<String> getGroupNames();public void destroy() throws HiveException;public void setSessionState(SessionState ss);
}

HiveAuthorizationProvider 授权

判断指定操作是否有权限,没有权限时,抛出异常。

public interface HiveAuthorizationProvider extends Configurable{public void init(Configuration conf) throws HiveException;public HiveAuthenticationProvider getAuthenticator();public void setAuthenticator(HiveAuthenticationProvider authenticator);/*** Authorization user level privileges.** @param readRequiredPriv*          a list of privileges needed for inputs.* @param writeRequiredPriv*          a list of privileges needed for outputs.* @throws HiveException* @throws AuthorizationException*/public void authorize(Privilege[] readRequiredPriv,Privilege[] writeRequiredPriv) throws HiveException,AuthorizationException;/*** Authorization privileges against a database object.** @param db*          database* @param readRequiredPriv*          a list of privileges needed for inputs.* @param writeRequiredPriv*          a list of privileges needed for outputs.* @throws HiveException* @throws AuthorizationException*/public void authorize(Database db, Privilege[] readRequiredPriv,Privilege[] writeRequiredPriv) throws HiveException,AuthorizationException;/*** Authorization privileges against a hive table object.** @param table*          table object* @param readRequiredPriv*          a list of privileges needed for inputs.* @param writeRequiredPriv*          a list of privileges needed for outputs.* @throws HiveException* @throws AuthorizationException*/public void authorize(Table table, Privilege[] readRequiredPriv,Privilege[] writeRequiredPriv) throws HiveException,AuthorizationException;/*** Authorization privileges against a hive partition object.** @param part*          partition object* @param readRequiredPriv*          a list of privileges needed for inputs.* @param writeRequiredPriv*          a list of privileges needed for outputs.* @throws HiveException* @throws AuthorizationException*/public void authorize(Partition part, Privilege[] readRequiredPriv,Privilege[] writeRequiredPriv) throws HiveException,AuthorizationException;/*** Authorization privileges against a list of columns. If the partition object* is not null, look at the column grants for the given partition. Otherwise* look at the table column grants.** @param table*          table object* @param part*          partition object* @param columns*          a list of columns* @param readRequiredPriv*          a list of privileges needed for inputs.* @param writeRequiredPriv*          a list of privileges needed for outputs.* @throws HiveException* @throws AuthorizationException*/public void authorize(Table table, Partition part, List<String> columns,Privilege[] readRequiredPriv, Privilege[] writeRequiredPriv)throws HiveException, AuthorizationException;/*** @return HivePolicyProvider instance (expected to be a singleton)* @throws HiveAuthzPluginException*/default HivePolicyProvider getHivePolicyProvider() throws HiveAuthzPluginException {return null;}
}

HiveAccessController

HiveAccessController 是访问控制命令调用的接口,包括 grant/revoke role/privileges, create/drop roles 和读取授权角色的状态。

@Private
public interface HiveAccessController {void grantPrivileges(List<HivePrincipal> hivePrincipals, List<HivePrivilege> hivePrivileges,HivePrivilegeObject hivePrivObject, HivePrincipal grantorPrincipal, boolean grantOption)throws HiveAuthzPluginException, HiveAccessControlException;void revokePrivileges(List<HivePrincipal> hivePrincipals, List<HivePrivilege> hivePrivileges,HivePrivilegeObject hivePrivObject, HivePrincipal grantorPrincipal, boolean grantOption)throws HiveAuthzPluginException, HiveAccessControlException;void createRole(String roleName, HivePrincipal adminGrantor)throws HiveAuthzPluginException, HiveAccessControlException;void dropRole(String roleName)throws HiveAuthzPluginException, HiveAccessControlException;void grantRole(List<HivePrincipal> hivePrincipals, List<String> roles, boolean grantOption,HivePrincipal grantorPrinc)throws HiveAuthzPluginException, HiveAccessControlException;void revokeRole(List<HivePrincipal> hivePrincipals, List<String> roles, boolean grantOption,HivePrincipal grantorPrinc)throws HiveAuthzPluginException, HiveAccessControlException;List<String> getAllRoles()throws HiveAuthzPluginException, HiveAccessControlException;List<HivePrivilegeInfo> showPrivileges(HivePrincipal principal, HivePrivilegeObject privObj)throws HiveAuthzPluginException, HiveAccessControlException;void setCurrentRole(String roleName) throws HiveAuthzPluginException, HiveAccessControlException;List<String> getCurrentRoleNames() throws HiveAuthzPluginException;List<HiveRoleGrant> getPrincipalGrantInfoForRole(String roleName) throws HiveAuthzPluginException,HiveAccessControlException;List<HiveRoleGrant> getRoleGrantInfoForPrincipal(HivePrincipal principal) throws HiveAuthzPluginException,HiveAccessControlException;void applyAuthorizationConfigPolicy(HiveConf hiveConf) throws HiveAuthzPluginException;
}

Hive Privilege 分析相关推荐

  1. Hive查询分析计算:股票分析

    Hive查询分析计算案例:股票分析 案例需求: 本案例是对单支股票一年中每日交易的数据处理,形成K线分析,重点在于前期数据规整处理与导入导出,从数据仓库方案的设计,涉及Hive优化操作,关系型数据库的 ...

  2. Hive Sql 分析实例: 淘宝消费者行为分析

    本文侧重用 Hive SQL 处理数据 1. 数据集说明 这次分析用的数据是来自阿里云天池: 数据集来源:user_behavior 数据采用csv格式保存, 未解压前905MB, 解压后3.41G ...

  3. Impala/Hive现状分析与前景展望

    2019独角兽企业重金招聘Python工程师标准>>> Impala和Hive野史 提到Impala就不得不提Google的Dremel,处理PB级数据规模的基于SQL的交互式.实时 ...

  4. Impala/Hive现状分析与前景展望【转载】

    Impala和Hive野史 提到Impala就不得不提Google的Dremel,处理PB级数据规模的基于SQL的交互式.实时数据分析系统.Dremel是Google推出的PaaS数据分析服务BigQ ...

  5. Hive漏斗分析(计算转换率)

    漏斗分析 就是算转换率如:业务相对转换率.绝对转换率 例:用户打开首页-->搜索-->详情页-->加购物车-->下订单-->支付 一系列操作的后的转换率 定义漏斗: 1. ...

  6. 大数据5.1 - hive离线分析

    1.1 分桶表 1.1.1 分桶表概念 分区和分桶可以同时,分桶是更细粒度的分配方式.分区是追求效率,分桶又解决什么问题呢?海量数据的分开存储. 对于每一个表(table)或者分区, Hive可以进一 ...

  7. Hive 之 分析窗口函数

    一 分析函数介绍 1.1分析函数定义 分析函数又被称为窗口函数.在联机分析(OLAP)的时候,传统是SQL可能需要进行多个自连接,从而导致查询新能很差.又或者有时候需要多维分析需要在不同层级进行聚合, ...

  8. Hadoop+hive+flask+echarts大数据可视化项目之flask结合echarts前后端结合显示hive分析结果

    Hadoop+hive+flask+echarts大数据可视化项目(五) ------flask与echarts前后端结合显示hive分析结果------- 关注过Hadoop+hive+flask+ ...

  9. 搜狗日志查询分析 (MapReduce+Hive综合实验)

    前提条件: 安装好hadoop2.7.3(Linux系统下) 安装好MySQL(Windows或Linux系统下) 安装好Hive(Linux系统下)参考:Hive安装配置 题目: 从搜狗实验室下载搜 ...

  10. hive中array嵌套map以及行转列的使用

    1. 数据源信息 {"student": {"name":"king","age":11,"sex" ...

最新文章

  1. 基于K-Means聚类算法的主颜色提取
  2. CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果...
  3. 25大技术主题向您发出最后一次约【惠】邀请
  4. 主动型页面性能利器:Page Status
  5. ubuntu设置PATH
  6. 毕昇 JDK:为啥是ARM 上超好用的 JDK
  7. Nginx/LVS/HAProxy负载均衡软件的优缺点详解
  8. 使用REST风格架构您需要知道的一些事
  9. python指令查询_Python命令行实现—查全国7天天气
  10. HenCoder自定义View学习整理
  11. 2021年道路运输企业主要负责人和安全生产管理人员安全考核题型二[安考星]
  12. java怎么用unicode写程序_简单的讲解Java是使用Unicode字符集
  13. PHP入门-简单博客编写
  14. Exchange 2007统一消息服务器功能概述
  15. 阳光沙滩博客系统后端api
  16. 随机积分理论中的几何布朗运动——Brown Motion and Stochastic Process
  17. 【习题5】用Python完成新建文档写古诗+复制
  18. 最新2021年自由钱江路《自由钱江路投@资课》值得学习吗
  19. php APP微信支付流程,PHP实现APP微信支付的实例讲解
  20. 机器学习中常用的5种回归损失函数

热门文章

  1. 关于STM32的IAP超详细图文解说
  2. 利用matlab求解常数e,利用matlab软件求解常数e和欧拉常数γ.docx
  3. 中国牛市短线炒股有哪些特征中国牛市炒股如何操作呢
  4. 使用Bookinfo应用测试Kuma服务网格
  5. 如何打造高质量的网页内容呢?
  6. EasyBoot教程一:制作WIN7原版多重启动盘方法
  7. python解释器中help的用法
  8. 移动硬盘linux系统安装win7系统,超简单的移动硬盘安装系统win7教程
  9. ‘adb‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  10. Golang interface 接口详解