本文首发微信公众号:码上观世界

中国“红武士”——刘粹刚

东方古国,炎黄子孙,五千余载,历史文明;。

诗礼传承,世界同钦,仁爱与人,道德长青。

濒江近海,有我南京,十朝都会,物阜文丰。

秦淮灯火,玄武清风,紫金绮丽,幕府山雄。

岁逢丁丑,噩耗惊逢,东瀛倭鬼,炮火加城。

屋坍梁折,百镇荡平,千乡闻哭,遍地哀鸣。

刀亡枪杀,不论军民,奸淫掳掠,丧尽良心。

朗朗书声,为之顿绝,哀哀母号,泪有血痕。

夫妻骤离,邻家同死,妇孺无别,老幼无分。

剜目斩首,剖腹流肠,举火而焚,掘土以坑。

淫妻淫女,直如禽兽,失心失德,竞赛杀人。

四世之家,为之遽灭,千家之镇,一日夷平。

月自壬子,四十二天,杀我同胞,三十万人。

秦淮玄武,血水同流,慕府紫金,遍野尸横。

十朝都会,已成地狱,千古文明,惨作屠城。

地覆同挡,天坠同擎,中华不死,万众一心。

上下同奋,日月同明,兄弟携手,急以见诚。

浴血八载,抗日有成,中华大地,始见光明。

辟地开天,祖国新生,改革开放,华夏复兴。

四海翘首,五洲叹惊 ,大同在梦 小康初成。

巡洋探月,强国富民,民心大振,巨龙飞腾。

时逢盛世,国耻长铭,强军强国,只为和平。

今开公祭,以国之名,举杯三酹,乃慰亡灵。

史无覆辙,人要前行,开来继往,更待后生。

呜呼,伏维尚飨。

(为纪念1937.12.13而发)

以下为正文。

Hive早期默认的授权模型基于类似传统RDBMS的用户、组、角色这样的权限概念,并且将对数据库、表、分区的操作权限分配给它们。但是,跟传统的RDBMS不同的是,Hive的权限模型是有缺陷的,不能够完全控制数据的访问,因为Hive的元数据和数据本身是分离的,元数据存储在关系数据库,而数据存储在HDFS等分布式系统中,且是可以独立访问的。于是带来一些问题,比如:

  • 给某用户分配了某表的查询权限,但是却无法读取数据表的数据。

  • 撤销了某用户查询某表的权限,但用户仍然能够读取其数据。

Hive Metastore作为独立的元数据服务,可以被不同的引擎(Hive、Spark、Flink、Trino等)调用,如果在引擎端没有做权限控制,Hive Metastore将像肉鸡一样存在,势必造成很大的安全问题。比如任何人都可以随意的查询、创建,修改甚至删除元数据,有些操作比如drop还可能造成数据本身的破坏。

但是Hive社区无法提供一种全能的权限控制方式,只是通过扩展方式提供了一种适应不同的场景的权限控制途径。主要有两种类型的权限控制方式:

1 通过Hcatcalog API访问hive数据的方式,实际是通过访问metastore元数据的形式访问hive数据,这类有MapReduce,impala,pig,Spark SQL,hive Command line等方式,基于这种方式的权限控制称为:Storage Based Authorization in the Metastore Server。

2 通过hiveserver2的方式访问hive数据,基于这种方式的权限控制称之为:SQL Standards Based Authorization in HiveServer2

基于存储的权限控制方式是解决Hive Metastore本身的权限控制的推荐方案,其思路是Hive Metastore元数据底层对应是存储路径,比如库表底层可以是hdfs存储目录,只要用户具备读写hdfs存储目录的权限,那自然具备了读写库表的权限,这种思路很直观,权限控制也很彻底,其他Hadoop应用如果想访问该库表,就必然具备底层目录的相应权限,无法绕过,因此提供了权限共享的机制。使用起来很方便,只要在metastore侧的hive-site.xml文件中添加如下配置项即可:

<property><name>hive.security.metastore.authorization.manager</name><value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value></property><property><name>hive.security.authorization.enabled</name><value>true</value>
</property>

它基于HDFS的ACL授权模型来为用户授权,比如需要给某用户分配warehouse目录的读、写、执行权限,可以这样设置:

hadoop fs -setfacl -m user:test:rwx /user/hive/warehouse

然而基于存储的授权模型也有不足:

  • 一些元数据接口(主要是读相关的接口)的权限控制没有实现;

  • 目录下新增的分区和文件操作权限并不能被除了owner用户以外的其他同组用户继承;

  • 无法进行列级别的精细化权限控制

基于标准SQL的授权方式能够提供精细化的权限控制,使用用户熟悉的grant/revoke语句进行授权。基于标准SQL的权限验证是在hiveserver2端进行SQL编译期间完成的,基于标准SQL的授权使用可以在配置文件hiveserver2-site.xml中添加以下配置项:

<property><name>hive.security.authorization.manager</name><value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value></property><property><name>hive.security.authenticator.manager</name><value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value></property><property><name>hive.security.authorization.enabled</name><value>true</value>
</property>

在HiveServer2端,基于标准SQL的配置是当前的默认推荐授权方式。虽然它也可以应用于Hive Cli,但是只要用户拥有了对HDFS的访问权限就可以绕过这套授权模型,所以为了避免给用户造成安全误导,默认禁用。

使用基于标准SQL的授权方式也有一些限制,比如:

  • 一些命令将被禁用,比如 dfs, add, delete, compile, 以及 reset ;

  • 修改Hive Configuration的set命令所能修改的配置项被限制在较小的范围(hive.security.authorization.sqlstd.confwhitelist);

  • add/drop函数和宏 被限制到admin 角色;

  • transform语法被禁用

基于存储的授权方式常用于Metastore的权限控制,基于SQL的授权方式常用于精细化权限控制,但是如果对精细化权限控制不要求,也是可以基于存储的授权方式来提供一致性的权限控制,然而也可以将两者结合起来同时使用。基于SQL的授权方式还可能存在一个问题:如果hive.server2.enable.doAs 设置为false,那么操作HDFS的用户将为一个固定的超级用户(通过HADOOP_USER_NAME环境变量指定),此时基于存储的授权方式将变成一个空壳,起不到权限验证的作用,此时只能用当前提交Hive SQL的用户来操作HDFS,为此HiveServer2以及Metastore必须共享同一套用户(组)体系。此外,Hive Metastore权限控制还有第三种方案:基于插件机制的Ranger,因为它不仅能实现精细化的权限控制,而且还支持基于Web UI操作的多种数据源的权限控制,目前获得较广泛的使用,但是Ranger不支持Hive Metastore,本文后续介绍如何基于Ranger来开发支持Hive Metastore。

如何对Hive Metastore进行权限控制相关推荐

  1. hive表级权限控制_Hive权限控制和超级管理员的实现

    Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 先决条件: 为了使用Hi ...

  2. hive表级权限控制_数据库权限管理:表、行、列级别的权限控制

    权限规则 1. 在配有主从集群时建议在主节点上做权限相关操作 2. 只有管理员和超级管理员才有将数据导入至表中的权限 3. 管理员用户赋予的是以整表为单位的权限,所有能赋予的权限为create/sel ...

  3. Spark SQL 权限控制

    背景 Spark如今已经是我们最常用的计算和查询引擎之一,但是很遗憾的是社区版的Spark本身没有任何权限控制手段(据说Spark的Thrift server服务支持create/drop权限控制,但 ...

  4. 【精华】Linux用户Hive权限控制实践

    1.困惑:    hadoop和hive通过客户机接入到集群生产,客户机是linux系统,那么linux用户和hive角色之间是什么关系呢? 或者说,怎么控制linux系统用户可以细粒度访问hive的 ...

  5. Amazon EMR 配置 Hive 对Hue用户的权限控制

    Hue 创建用户后无权限访问Hive 在hue中创建完用户后,还需要在主节点中创建这个user并在hive和hadoop中为这个user赋予权限,经过我这边的测试,步骤如下: Hue添加用户 添加管理 ...

  6. Hive访问权限控制

    hive有两种类型的权限控制方式: 一.通过Hcatcalog API访问hive数据的方式,实际是通过访问metastore元数据的形式访问hive数据,这类有MapReduce,impala,pi ...

  7. 在hue当中设置hive当中数据库的控制权限。

    这段时间在搞大数据的集群搭建工作,并且安装了hive的服务,但是没有对其中的数据库的操作权限做限制,每个人都可以对数据库进行增删改查.今天有空做了一下了对hive数据库当中的数据库做一些限制. 我们都 ...

  8. hive插件 ranger_Apache Ranger及Hive权限控制

    一.Ranger概述 1.Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计.它可以对Hadoop生态的组件如HDFS.Yarn.Hive.Hbase等进行细粒 ...

  9. 基于 Sentry Hive 权限控制命令详解

    Sentry不支持Hive CLI列权限管理,建议禁用Hive CLI. (也不支持SparkSql列权限管理) #权限分为 SELECT ,INSERT ,ALL #查看所有role show ro ...

最新文章

  1. Linux系统资源管理 之 硬件信息
  2. elasticsearch建立索引操作的API
  3. 【Python】青少年蓝桥杯_每日一题_2.03_绘制菱形和圆
  4. 工业机器人电柜布线_协作并联,重新注解并联机器人
  5. Aptana:JavaScript开发利器
  6. CodeChef - NWAYS 组合数 朱世杰恒等式
  7. 前端学习(491):script元素
  8. 第九十一期:架构设计常用到的10种设计模式,你都知道吗?
  9. pod 挂载点 mysql_Pod挂载(Secret )
  10. 面试经验分享|精华版
  11. 秋叶一键重装系统连接服务器失败,如何解决远程桌面无法连接
  12. App.config 中读写appSettings、system.serviceModel终结点,以及自定义配置节
  13. 一个简单的SQL最优写法讨论(1)
  14. E-Prime教程 | 打mark标记
  15. 法拉科机器人编程软件_发那科 FANUC 机器人仿真软件 中文 roboguide9.1 视频教程...
  16. 解决小牛电动自行车电池不能输出电压
  17. 架构师到底该不该写代码?
  18. 计算所汉语词性标记集
  19. 手机扫描电脑百度网盘二维码,二维码无法刷新的解决办法
  20. 【linux性能优化】定位分析狂打日志的问题

热门文章

  1. 如果们正预测基本面子
  2. 邓俊辉数据结构学习笔记3-二叉树
  3. 新用户域名实名认证教程---金万维
  4. linux7配置dns服务,RHEL7 DNS配置
  5. javascript 打印错误信息 catch err
  6. HBase常用过滤器
  7. 永远的疯狂竹子----纪念退役不久的V-Gundam
  8. dwcss样式中英对照_DW中常用css样式四种类型详细解析说明
  9. c语言水仙花数算法流程图,C语言经典算法例题求100-999之间的“水仙花数
  10. 《海豚湾》网友评论转载