由于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;
 
@Inject
public AllowSpecifiedAccessControl(AllowSpecifiedAccessControlConfig config) {
    this.user = config.getUser();
    this.db = config.getDB();
}

3、修改module类

新增一个@Inject、@Provides注解修饰的方法,使config对象可以注入到control类的构造器中

重写configure方法,使用configBinder包装类增强Binder对象,可以绑定config配置到该module上

@Override
public void configure(Binder binder)
{
    configBinder(binder).bindConfig(AllowSpecifiedAccessControlConfig.class);
}
 
@Inject
@Provides
public ConnectorAccessControl getConnectorAccessControl(AllowSpecifiedAccessControlConfig config)
{
    return new AllowSpecifiedAccessControl(config);
}

PrestoSPI安全扩展的更多相关文章

  1. Asp.net Boilerplate之AbpSession扩展

    当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...

  2. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  3. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  4. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  5. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  6. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  7. ExtJS 4.2 Date组件扩展:添加清除按钮

    ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...

  8. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  9. Hawk 6. 编译和扩展开发

    Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...

随机推荐

  1. Cesium 源码笔记[1] Viewer模块实例化的大致过程

    我原本想写日记的,但是不太现实. 源码下载 源码可以从源码包和发行包中的Source目录中获取. Cesium的模块化机制从1.63版本开始,由原来的RequireJs变为ES6.但有可能是原先设计耦 ...

  2. MATLAB plot 画图大全

    距离上一次打开Matlab已经过去了半年多,再次上手,画图时诸多不熟悉,促使我写下这篇blog,自己以后可以快速查看,也分享给大家~ 二维线图  plot plot(X1,Y1,LineSpec1,. ...

  3. 搭建生产级的Netty项目

    Netty是Trustin Lee在2004年开发的一款高性能的网络应用程序框架.相比于JDK自带的NIO,Netty做了相当多的增强,且隔离了jdk nio的实现细节,API也比较友好,还支持流量整 ...

  4. 用python实现矩阵转置,python3 中zip()函数

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  5. Linux - 文件的三种时间之atime、ctime、mtime的区别和简单用法

    在Linux中,文件或者目录中有三个时间属性 atime ctime mtime 简名 全名 中文 作用 atime Access Time 访问时间 最后一次访问文件(读取或执行)的时间 ctime ...

  6. 吴恩达最新TensorFlow专项课程开放注册,你离TF Boy只差这一步

    不需要 ML/DL 基础,不需要深奥数学背景,初学者和软件开发者也能快速掌握 TensorFlow.掌握人工智能应用的开发秘诀. 以前,吴恩达的机器学习课程和深度学习课程会介绍很多概念与知识,虽然也会 ...

  7. 1.用eclipse创建maven工程

    第一步.File→New→Maven Project (需要下载安装配置Maven等,这些步骤省略) (找不到的话选Other,里面的Maven文件夹里有) 二.记得勾选上,然后点Next 三.填完点 ...

  8. localStorage应用(写的时间缓存在本地浏览器)

    最近用了下localStorage,于是想记录加深下映象: 有关更详细的介绍,可以去看https://www.cnblogs.com/st-leslie/p/5617130.html: 我这引用了这个 ...

  9. (3)SQL Server表分区

    1.简介 当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度.比如电商平台订单表,库存表,由于长年累月读写较多,积累数 ...

  10. 如何让Java应用成为杀不死的小强?(下篇)

    各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 经过前两期的铺垫及烧脑的分享,我们大概对「如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否 ...