内容简介:权限控制,对于MLSQL而言的重要程度可以说是生命线。 MLSQL面对了各式各样的资源(联邦制),比如MySQL, Oracle,HDFS,Hive,Kafka,Sorl,ElasticSearch,Redis,API,Web等等,不同用户对这些数据源(以及表,列)的权限是不一样的。传统模式是,每个用户都需要有个proxy user,然后到每个数据源里面给这个proxy user进行授权。 这看起来就是麻烦点,但是在实际操作中,基本是不可能的,因为不同的数据源在不同的团队里面,那么整个申请流程可能要天甚至周
前言
权限控制,对于MLSQL而言的重要程度可以说是生命线。 MLSQL面对了各式各样的资源(联邦制),比如MySQL, Oracle,HDFS,
Hive,Kafka,Sorl,ElasticSearch,Redis,API,Web等等,不同用户对这些数据源(以及表,列)的权限是不一样的。
传统模式是,每个用户都需要有个proxy user,然后到每个数据源里面给这个proxy user进行授权。 这看起来就是麻烦点,但是在实际操作中,基本是不可能的,因为不同的数据源在不同的团队里面,那么整个申请流程可能要天甚至周计了。
其实上面的至少还是可以执行的,但对于采用Hive做数仓的公司,因为Hive的授权模式是跟着 Linux 用户走的,也就是Spark启动用户是谁,谁就有权限访问,这个对于多租户的MLSQL应用来说,是完全不可行的了,因为比如启动Spark的是sparkUser,但是真正执行的人,其实可能是张三,李四等等。Hive就无法知道是具体哪个人完成的,只知道是sparkUser,这肯定是不行的。
另外,对于需要在一个脚本里,访问多个数据源,跑了一个小时,然后其中有个数据源因为没有权限,然后被拒绝,这也是一件极度让人恼火的事情。
问题来了
那么,怎么才能在脚本运行前,就知道脚本有没有授权数据源(表,列)?
答案
题外话:标题不严谨,因为MLSQL本质是个解释性执行语言,不需要编译,所以严格意义上时,解析时权限控制。 MLSQL如果开启了权限验证,他会先扫描整个脚本,然后提取必要的信息,这些信息就包含了各种数据源的详细信息,从而在运行前就可以知道你是不是访问了未经授权的库表。那么MLSQL是怎么做到的呢?我们来看下面的信息:
connect jdbc where driver="com.mysql.jdbc.Driver" and url="jdbc:mysql://${ip}:${host}/db1?${MYSQL_URL_PARAMS}" and user="${user}" and password="${password}" as db1_ref; load jdbc.`db1_ref .people` as people; save append people as jdbc.`db1_ref.spam` ;
因为MLSQL要求任何数据源,都需要使用load语句进行加载,在解析load语句时,MLSQL知道,用户现在要访问的是基于JDBC协议的数据源访问,他通过url拿到了这些信息:
db: db1 table: people operateType: load sourceType: mysql tableType: JDBC
当然,这个脚本用户还会写入一张spam表,也一样会被提取信息:
db: db1 table: people operateType: save sourceType: mysql tableType: JDBC
然后还有一张临时表people,所以这个脚本总共有三张表信息,之后这些信息会被发送到AuthCenter里进行判断,AuthCenter会告诉MLSQL那张表是没有对当前用户授权的,如果发现未经授权的表,MLSQL会直接抛出异常。整个过程中,完全不会执行任何物理计划,只是对脚本的信息抽取。
在MLSQL中,我们不能在select语句里访问hive表,只能通过load语句加载,比如下面的句子会报错:
select * from public.abc as table1;
我们无权在select语句中访问public.abc库,如果需要使用,你可以通过如下方式完成:
load hive.`public.abc ` as abc; select * from abc as table1;
总结
MLSQL通过一些有效的限制,,可以在语法解析层面直接提取了所有数据源相关信息,并且将其发送给到配套的权限中心进行判断,避免在运行时发现授权拒绝问题。MLSQL此举意义重大,使得MLSQL系统不再完全依赖于底层系统的权限控制,从而让问题得到了极大的简化。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Django框架–权限代码+左侧菜单和权限应用
- 同等权限下多任职之间数据权限的实例
- 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
- 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
- Spring-Security权限管理框架(1)——根据角色权限登录
- Tangdao 2.0.1 发布,更新前后分离,完成基础角色权限,数据权限组件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JUnit Recipes中文版
陈浩等译 / 电子工业 / 2006-9 / 69.00元
《JUnit Recipes中文版:程序员实用测试技巧》主要介绍了在Java开发中使用JUnit进行单元测试的各种方法、原则、技巧与实践。本书出自开发一线专家之手,本着实用的原则,涵盖各类Java开发中应用JUnit的实用技巧,内容丰富、全面深入;无论对于需要应用JUnit进行单元测试的一线Java开发人员,还是JUnit入门、进阶者,本书都是一本不可多得的实用指南。这本书介绍了大量的JUnit实......一起来看看 《JUnit Recipes中文版》 这本书的介绍吧!