怎么通过MySQL-Proxy实现数据库的认证、授权与审计


怎么通过MySQL-Proxy实现数据库的认证、授权与审计,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。总来的话数据库里面的账号就会越来越多,账号授权也是一个蛋疼的工作。特别是还会有“mysql从删库免费云主机域名到跑路”的问题,员工离职删除账号也会十分的麻烦。对于财大气粗的财阀来说这个问题很好解决,买一套设备就好了,但是对于创业公司要力争做到“零元党”,不然也没办法完全体现出自己的价值。最初的想法是对开源mysql的代理工具做一次二次开发,于是乎开始搜集类似工具的资料。无意中发现mysql-proxy居然预留了6个钩子允许用户通过Lua脚本去调用他们,也就是说我们可以自行编写Lua脚本来掌握“用户的命运”。connect_server() 当代理服务器接受到客户端连接请求时会调用该函数read_handshake() 当mysql服务器返回握手相应时会被调用read_auth() 当客户端发送认证信息时会被调用read_auth_result(aut) 当mysql返回认证结果时会被调用read_query(packet) 当客户端提交一个sql语句时会被调用read_query_result(inj) 当mysql返回查询结果时会被调用显然,通过上述的read_auth和read_query两个钩子函数,我们可以实现对mysql数据库的认证、授权和审计的工作。我们的目标是认证、授权和审计,那么read_auth函数可以实现认证和授权,read_query可以实现审计的功能。read_query比较容易实现,只需要get到用户发来的sql语句写到消息队列里就好了,我这里就简单地写到redis的list中。read_auth函数就要相对复杂些,不仅需要对用户提交的一次性password进行校验,还需要读取授权信息,让用户登录到mysql的时候华丽的变身成为我们指定的身份。1.用户访问Openresty,后端的lua脚本会调用公司内部使用的im软件的消息接口,将生成的一次性口令发送给用户。与此同时,也会将该口令写入redis。2.用户使用mysql客户端连接指定的mysql-proxy,此时进入read_auth钩子函数,先对用户提交的口令进行确认。然后会去redis请求当前数据库对应developer、master、owner三个role的授权名单,查看三个名单中是否含有当前用户,如果有则将用户以其对应的role跳转到数据库上。3.当认证授权成功结束后,用户通过上一步授权的role来访问后端mysql,并且执行的所有sql语句都会进入read_query钩子函数被记录到redis的队列中。显然,使用用户名test登录mysql-proxy,最终跳转到mysql上时用户已经变为developer。用于非业务场景连接数据库,比如开发运维人员在公司连接数据库。管理脚本需要监控每个mysql-proxy进程的状态,负责他们的启动和停止,以及将他们的域名解析为ip存入redis中。授权脚本读取一个yaml文件,将文件中的授权规则同步到redis中。每个数据库中都只需要新建developer、master、owner三个账号,yaml配置文件中的内容决定用户使用以上哪种role登录到mysql。mysql-proxy需要使用源码编译安装。启动mysql-proxy的命令为:关于怎么通过MySQL-Proxy实现数据库的认证、授权与审计问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注云编程开发博客行业资讯频道了解更多相关知识。

相关推荐: linux如何查看jdk是什么版本

这篇文章主要介绍了linux如何查看jdk是什么版本的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux如何查看jdk是什么版本文章都会有所收获,下面我们一起来看看吧。 查看方法:1、如果没有设置jdk环境变量,则需要先使用c…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/03 13:23
下一篇 02/03 13:24