解跑狗藏宝图的论坛解藏宝图跑狗论坛解藏宝图跑狗玄机论坛69期藏

2018-10-08 18:24

  特彩吧免费资料年初的时候从猪厂毕业,入职了一家小公司组建“一个人的信息”。正如同市面上大多数小公司一样,没有专职的DBA来抓数据库的工作,解跑狗藏宝图的论坛解藏宝图跑狗论坛解藏宝图跑狗玄机论坛69期藏宝图论坛高清跑狗图跑狗图2018藏宝图跑狗报藏宝图六玄开奖网详解跑狗图金多宝龙虎风云三肖全年少错平特一肖公式香港红姐图库彩图118红组118图库彩库118印刷图库更新板118挂牌玄机高清金准杀四肖图因此会有一批人时不时地突然跑过来求爷爷告奶奶似的要访问数据库。

  这种状况一次两次勉强可以接受,总来的话数据库里面的账号就会越来越多,账号授权也是一个蛋疼的工作。特别是还会有“mysql从删库到跑”的问题,员工离职删除账号也会十分的麻烦。对于财大气粗的财阀来说这个问题很好解决,买一套设备就好了,但是对于创业公司要力争做到“零元党”,不然也没办法完全体现出自己的价值。

  最初的想法是对开源mysql的代理工具做一次二次开发,于是乎开始搜集类似工具的资料。your con无意中发现mysql-proxy居然预留了6个钩子允许用户通过Lua脚本去调用他们,也就是说我们可以自行编写Lua脚本来掌握“用户的命运”。

  显然,通过上述的read_auth和read_query两个钩子函数,我们可以实现对mysql数据库的认证、授权和审计的工作。

  我们的目标是认证、藏宝图论坛2018年新老藏宝图诗句藏宝图图片大全藏宝图是什么藏宝图玄机论坛100tk藏宝图正版专解藏宝图特彩吧高手网天下彩2018三中三资料红姐统一印刷图库铁板神数码报图2233cc红姐统一图库彩色红姐彩色印刷图库8图库印刷图库红姐图库授权和审计,那么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的队列中。

  管理脚本需要每个mysql-proxy进程的状态,负责他们的启动和停止,以及将他们的域名解析为ip存入redis中。

  每个数据库中都只需要新建developer、master、owner三个账号,yaml配置文件中的内容决定用户使用以上哪种role登录到mysql。香港赛马资料