由于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);
}

最新文章

  1. 一个简单的WPF字体选择器实现
  2. 定制centos安装iso
  3. <转载>DB2常用命令
  4. 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法
  5. OC-手动内存管理
  6. poj 1284 Primitive Roots
  7. 【USACO 2.3.3】零数列
  8. VC++中的类的内存分布(上)
  9. VPS(Virtual Private Server 虚拟专用服务器)[转自百度]
  10. myEclipse JSP 调用 IDL8.2 配置
  11. ASP.NET Zero--12.一个例子(5)商品分类管理-编辑分类
  12. Eclipse配置注释模板详细介绍
  13. (python)面向对象
  14. 500 OOPS: bad bool value in config file for: anon_world_readable_only Login failed.
  15. word公式的使用
  16. Linux学习笔记15—RPM包的安装OR源码包的安装
  17. 【Cf #291 B】R2D2 and Droid Army(二分,线段树)
  18. JavaScript数据结构-5.队列
  19. CentOS 傻瓜式部署uWSGI + nginx + flask
  20. Number使用笔记

热门文章

  1. 条件随机场 CRF
  2. HDU 1847-Good Luck in CET-4 Everybody!-博弈SG函数模板
  3. Flutter 强大的MediaQuery控件
  4. matplotlib命令与格式:参数配置文件与参数配置
  5. TensorFlow RNN 教程和代码
  6. SpringBoot中遇到的一些问题
  7. 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
  8. Spring钩子接口Aware
  9. 新手必学linux文本文件编辑命令 vi vim.....
  10. Spring ApplicationContext 容器