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; @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); } |
最新文章
- 一个简单的WPF字体选择器实现
- 定制centos安装iso
- <;转载>;DB2常用命令
- 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法
- OC-手动内存管理
- poj 1284 Primitive Roots
- 【USACO 2.3.3】零数列
- VC++中的类的内存分布(上)
- VPS(Virtual Private Server 虚拟专用服务器)[转自百度]
- myEclipse JSP 调用 IDL8.2 配置
- ASP.NET Zero--12.一个例子(5)商品分类管理-编辑分类
- Eclipse配置注释模板详细介绍
- (python)面向对象
- 500 OOPS: bad bool value in config file for: anon_world_readable_only Login failed.
- word公式的使用
- Linux学习笔记15—RPM包的安装OR源码包的安装
- 【Cf #291 B】R2D2 and Droid Army(二分,线段树)
- JavaScript数据结构-5.队列
- CentOS 傻瓜式部署uWSGI + nginx + flask
- Number使用笔记
热门文章
- 条件随机场 CRF
- HDU 1847-Good Luck in CET-4 Everybody!-博弈SG函数模板
- Flutter 强大的MediaQuery控件
- matplotlib命令与格式:参数配置文件与参数配置
- TensorFlow RNN 教程和代码
- SpringBoot中遇到的一些问题
- 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
- Spring钩子接口Aware
- 新手必学linux文本文件编辑命令 vi vim.....
- Spring ApplicationContext 容器