mysql审计binlog_mysql基于init-connect+binlog完成审计功能

目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版、Percona和MariaDB上,但是mysql社区版本有提供init-connect选项,基于此我们可以用它来完成审计功能。

init-connect参数说明:

http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_init_connect

step1:创建用户数据库表

setnames utf8create databaseauditlog;create tableauditlog.t_audit(

idint not nullauto_increment,

thread_idint not null,

login_timetimestamp,

localnamevarchar(50) default null,

matchnamevarchar(50) default null,primary key(id)

)ENGINE=InnoDB default charset=utf8 comment '审计用户登录信息';

step2:授权所有的用户拥有对审计表的插入权限

select concat("grant insert on auditlog.t_audit to '",user,"'@'",host,"';") from mysql.user; #拼结授权语句

……

flushprivileges;

注意,以后每添加一个用户都必须授权此表的插入权限,要不会连接不上。

step3:设置init_connect参数

set global init_connect='insert into auditlog.t_audit(id,thread_id,login_time,localname,matchname) values(null,connection_id(),now(),user(),current_user());';

并在配置文件中增加如下语句:

init-connect='insert into auditlog.t_audit(id,thread_id,login_time,localname,matchname) values(null,connection_id(),now(),user(),current_user());'

以便下次重启时能生效

验证:

我们登陆后并删除一条记录,查看binlog,我们可以看到此操作的thread_id为7:

e31bc30e410b255ee13607b8616c037b.png

然后我们来查看此表t_audit表:

[zejin] 3301>select * fromauditlog.t_audit;+----+-----------+---------------------+---------------------------+-------------------------+

| id | thread_id | login_time | localname | matchname |

+----+-----------+---------------------+---------------------------+-------------------------+

| 1 | 5 | 2016-08-10 11:01:07 | user_app@192.168.1.240 | user_app@192.168.1.% |

| 2 | 6 | 2016-08-10 11:02:02 | user_app@192.168.1.236 | user_app@192.168.1.% |

| 3 | 7 | 2016-08-10 11:19:54 | user_yunwei@192.168.1.240 | user_yunwei@192.168.1.% |

+----+-----------+---------------------+---------------------------+-------------------------+

3 rows in set (0.00 sec)

可以看到thread_id为7的用户为user_yunwei,在192.168.1.240机器上操作删除的,完成了对数据的简单审计。

扩展说明:

1.init-connect只会在连接时执行,不会对数据库产生大的性能影响

2.init-connect是在连接时执行的动作命令,故可以用它来完成其它的功能,如:init_connect='SET autocommit=0'

3.init-connect不会记录拥有super权限的用户记录,为了防止init_connect语句由于语法错误或权限问题而所有用户都登陆不了的情况,保证至少super用户能登陆并修改此值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值