[presto原理] 使用presto的插件开发权限验证和审计

前言

随着presto在公司内部的使用,越来越多的同事将日常的开发迁移到presto,需要不单单仅限于查询平台,更多的用户希望可以通过自己的账号直接使用presto查询,这样就是带来三个问题:

用户可以使用内部ERP系统的账号和密码进行查询
需要验证用户的权限是否有查询表的权限
基于审计的要求,需要保留所有的查询痕迹

调研

presto是一个非常方便的mpp架构引擎,为了方便公司用户的使用,提供了非常方便的插件,具体可以参考:presto开发指南

针对以上的需求,通过文档,设计了如下方案:

  • 开启https + ldap  做账号和密码验证, presto 本身支持。
  • 开发AccessCoutrol 对每次查询做权限验证
  • 开发EventListener 对每次查询做审计记录

配置和开发

开启https 和 ldap 验证

公司内部有ldap,可以充分利用起来,如果没有ldap的公司,可以考虑使用passwordfile的模式,讲用户名和密码写在特定的文件里面,具体可以参考官方文档。

  1. config.preperties配置
    在 presto 的 config.preperties 新增https配置,开启https 和 用户名称密码登录
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=/opt/software/presto/https/keystore.jks
http-server.https.keystore.key=key
http-server.authentication.type=PASSWORD
  1. password-authenticator.properties

password-authenticator.name=ldap
ldap.allow-insecure=true
ldap.url=ldap://host:389
ldap.user-bind-pattern=${USER}@XX.com
ldap.user-base-dn=dc=XX,dc=com
开发新的SystemAccessControl

参考文档

SystemAccessControl 提供对用户一系列行为的验证,比如说能否执行某个表的select请求,或者执行删除操作,可以通过这个接口,完全接入公司内部的系统进行权限的验证。

利用EvenListener实现审计

参考文档

EvenListener 提供了Query产生、完成的接口,可以通过这个接口实现审计需求。

总结

总体来说,还是比较简单的一个功能。

上一篇:代码安全 | 第十二期:LDAP注入漏洞


下一篇:Apache Directory Studio创建ldap用户