前言
随着presto在公司内部的使用,越来越多的同事将日常的开发迁移到presto,需要不单单仅限于查询平台,更多的用户希望可以通过自己的账号直接使用presto查询,这样就是带来三个问题:
用户可以使用内部ERP系统的账号和密码进行查询
需要验证用户的权限是否有查询表的权限
基于审计的要求,需要保留所有的查询痕迹
调研
presto是一个非常方便的mpp架构引擎,为了方便公司用户的使用,提供了非常方便的插件,具体可以参考:presto开发指南。
针对以上的需求,通过文档,设计了如下方案:
- 开启https + ldap 做账号和密码验证, presto 本身支持。
- 开发AccessCoutrol 对每次查询做权限验证
- 开发EventListener 对每次查询做审计记录
配置和开发
开启https 和 ldap 验证
公司内部有ldap,可以充分利用起来,如果没有ldap的公司,可以考虑使用passwordfile的模式,讲用户名和密码写在特定的文件里面,具体可以参考官方文档。
- 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
- 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产生、完成的接口,可以通过这个接口实现审计需求。
总结
总体来说,还是比较简单的一个功能。