PrestoSPI安全扩展
由于Presto官方文档和谷歌搜索都没有相关的内容,git项目中也没有支持sentry的安全插件扩展,因此只能从源码中寻找答案,在梳理完SPI包的安全相关源码结构后,已实现了一个自定义的安全插件,经验证可正常使用
简要总结如下:
扩展系统级权限SAC
系统级权限是对Presto支持的所有数据源都有效的,在实际判断一个sql操作的权限时,要先过系统级权限这一关
一、基本流程
1、实现com.facebook.presto.spi.security.SystemAccessControl接口或直接继承已有的实现类
(1)定义NAME是一个唯一的字符串,便于在etc/access-control.properties的access-control.name指定
(2)实现各种方法
2、在com.facebook.presto.security.AccessControlManager的AccessControlManager()方法加上:
addSystemAccessControlFactory(new AllowSpecifiedSystemAccessControl.Factory()); |
3、打包presto-main模块并替换lib目录下的presto-main jar包
扩展数据源级权限CAC
数据源权限是对于某个数据源有效的,系统级权限放行后,可以针对某个数据源做一些差异化的权限控制
一、基本流程
1、实现com.facebook.presto.spi.connector.ConnectorAccessControl接口或直接继承已有的实现类
实现各种方法
2、再写一个对应的实现了Module接口的包装类,configure()方法
binder.bind(ConnectorAccessControl.class).to(AllowSpecifiedAccessControl.class).in(Scopes.SINGLETON); |
3、再在想要扩展的数据源内添加相关配置以关联上新的扩展类
如hive-hadoop2
在com.facebook.presto.hive.security.HiveSecurityModuler的setup()方法加上
bindSecurityModule("allow-specified", new AllowSpecifiedAccessControlModule()); |
4、打包并替换
1和2步骤修改的是presto-plugin-toolkit模块,3步骤修改的是presto-hive模块
打包后替换后所要修改数据源如plugin/hive-hadoop2/目录下的jar包
二、自定义配置
以hive catalog为例,在etc/catalog/hive.properties新增如下属性
security.user 用户名
security.db 数据库的列表,以逗号分开
在presto-plugin-toolkit模块com.facebook.presto.plugin.base.security包
1、额外新增一个config pojo类
@NotNull注解表示此属性不可为空,@Config(属性名)表示set方法要赋这个属性的值
2、修改control类
新增一个可传入config对象的构造器,由@Inject修饰可接受注入
新增两个属性从而接收注入的配置
private final String user;private final String db;@Injectpublic AllowSpecifiedAccessControl(AllowSpecifiedAccessControlConfig config) { this.user = config.getUser(); this.db = config.getDB();} |
3、修改module类
新增一个@Inject、@Provides注解修饰的方法,使config对象可以注入到control类的构造器中
重写configure方法,使用configBinder包装类增强Binder对象,可以绑定config配置到该module上
@Overridepublic void configure(Binder binder){ configBinder(binder).bindConfig(AllowSpecifiedAccessControlConfig.class);}@Inject@Providespublic ConnectorAccessControl getConnectorAccessControl(AllowSpecifiedAccessControlConfig config){ return new AllowSpecifiedAccessControl(config);} |
PrestoSPI安全扩展的更多相关文章
- Asp.net Boilerplate之AbpSession扩展
当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...
- 恢复SQL Server被误删除的数据(再扩展)
恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Dapper扩展之~~~Dapper.Contrib
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...
- ExtJS 4.2 Date组件扩展:添加清除按钮
ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- Hawk 6. 编译和扩展开发
Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...
随机推荐
- Contest 153
2019-09-14 23:16:25 总体感受:节奏尚可,难度尚可.然而还是卡在了最后一题,完全没有想到使用dp. 注意点: 1)Contest的最后一题往往是DP,Graph,这个敏感度需要提高: ...
- SpringBoot项目中应用Jedis和一些常见配置
优雅的使用Jedis Redis的Java客户端有很多,Jedis是其中使用比较广泛和性能比较稳定的一个.并且其API和RedisAPI命名风格类似,推荐大家使用 在项目中引入Jedis 可以通过Ma ...
- IP协议的助手 —— ICMP 协议
IP协议的助手 —— ICMP 协议 IP协议的助手 —— ICMP 协议 ping 是基于 ICMP 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协议. ICMP 是什么? ...
- Transformers 快速入门 | 一
作者|huggingface 编译|VK 来源|Github 理念 Transformers是一个为NLP的研究人员寻求使用/研究/扩展大型Transformers模型的库. 该库的设计有两个强烈的目 ...
- 你能在泰坦尼克号上活下来吗?Kaggle的经典挑战
Kaggle Kaggle是一个数据科学家共享数据.交换思想和比赛的平台.人们通常认为Kaggle不适合初学者,或者它学习路线较为坎坷. 没有错.它们确实给那些像你我一样刚刚起步的人带来了挑战.作为一 ...
- ABP.Net Core 小白使用教程
自己简单的记录一下 1.到官网下载模版项目 我下载的是那个前后分离Vue版 2.用VS2017打开,将Web.Host设置为启动项(Core 2.1要看自己VS下载了这个版本没) 3.设置数据库连接 ...
- flask中的分页器
paginate(): 分页查询,返回一个分页对象 paginate(参数1, 参数2, 参数3) : 参数1:当前是第几页(page) 参数2:每页显示几条信息(per_page) 参数3:err ...
- Dome 多人人脸识别 face_recognition
Dome 多人人脸识别 face_recognition 注意 face_recognition 依赖 face_recognition_models 中文字体文件需要自己下载 1.多人人脸识别 # ...
- Python——office编程
一.office编程需求 二.Excel编程 import xlrd path=input("输入路径:") workbook=xlrd.open_workbook(path)#打 ...
- 相见恨晚的 Git 命令动画演示,一看就懂!
虽然 Git 是一个强大的工具,但是我觉得大部分人都会同意我说的:它也可以是一个--噩梦!我一直觉得,使用 Git 的时候把操作过程在脑海里视觉化会非常有用:当我执行某个命令的时候,分支之间是如何交互 ...