使用MySQL init_connect功能做SQL审计
2017-08-19 16:47
519 查看
MySQL的audit插件是一个比较实用的第三方MySQL插件,它可以实现MySQL的SQL审计通过json的格式记录在文件中,需要可以参看:http://jim123.blog.51cto.com/4763600/1955487,当然比较遗憾的是目前macfee公司只用做Unix/Linux系统下的插件,如果是在DOS系统(Windows)中使用MySQL就没有audit插件了,所以如果不使用audit插件来实现MySQL的SQL审计时就需要使用init_connect和MySQL的binlog来实现MySQL的SQL审计。init_connect的功能是表示非super用户下在客户端连接上MySQL时隐式执行的一条自定义的SQL语句,所以在使用init_connect功能时常常用于记录一些关键信息在数据库中,然后根据这些相应的关键信息去查找MySQL的binlog日志,所以在使用init_connect的功能时也要确保MySQL的binlog日志记录功能开启。默认缺省下init_connect参数的值是空,即什么都不做:
配置MySQL的init_connect参数也很简单,操作方法如下:
mysql> show variables like 'init_connect'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | init_connect | | +---------------+-------+ 1 row in set (0.01 sec)在这里需要注意的有两点:1、配置init_connect参数时必须使用super用户来配置,普通用户是没有相应的权限的;2、init_connect参数中的隐式执行的SQL只针对普通用户对super用户来说无效,所以在平时在使用MySQL的过程中就应该区分管理好MySQL的账户权限。
配置MySQL的init_connect参数也很简单,操作方法如下:
mysql> create database db_monitor default CHARACTER SET utf8;#根据实际情况使用相应的字符集 Query OK, 1 row affected (0.00 sec) mysql> use db_monitor; Database changed mysql> CREATE TABLE accesslog ( -> thread_id INT (11) DEFAULT NULL, -> #线程id -> log_time datetime DEFAULT NULL, -> #登录时间 -> localname VARCHAR (50) DEFAULT NULL, -> #登录名称,带详细ip -> matchname VARCHAR (50) DEFAULT NULL, -> #登录用户 -> KEY idx_log_time (log_time) -> ); Query OK, 0 rows affected (0.04 sec)在这里先建立好相应的数据库的库表用于记录init_connect参数配置下的SQL语句的信息。最后,在设置下init_connect中需要执行的SQL语句,这里需要注意这里的SQL语句一定不能写错,一旦写错会造成无法正常的登录MySQL:
mysql> set global init_connect='insert into db_monitor.accesslog(thread_id,log_time,localname,matchname) values(connection_id(),now(),user(),current_user())'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)在设置好后把相应的参数写入my.cnf或my.ini中,使下一次重启后MySQL时init_connect参数生效:
init_connect='insert into db_monitor.accesslog(thread_id,log_time,localname,matchname) values(connection_id(),now(),user(),current_user())'最后在把需要审计SQL的用户授权对db_monitor.accesslog表的INSERT权限,这一点很重要,如果没有配置也会导致无法正常的连接MySQL服务器,就新建一个用户演示下:
mysql> GRANT INSERT on `db_monitor`.accesslog to 'username'@'%' identified by "youpassword";在授权好后,需要检查下MySQL是否有开启binlog日志,这个在以前说MySQL的Replication时有说过,在这里就不做过多的赘述,需要可以参看:http://jim123.blog.51cto.com/4763600/1862808
mysql> show global variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.01 sec) #如果没有开就开启后,再在my.cnf或my.ini配置文件中填如相应的配置参数,使下一次重启MySQL的后binlog设置不变,如: log_bin=mysql-bin log_bin_index=mysql-bin.index expire_logs_days = 30这样MySQL使用init_connect功能的SQL审计就做好了,在平时只需要查询db_monitor.accesslog表中的相应记录根据登录用户的线程ID再关联MySQL的binlog就可以实现对MySQL的SQL审计,当然使用这种方式实现的SQL审计效果当然不如使用audit插件来实现MySQL的SQL审计效果好,但是它的优点是对MySQL的性能影响小。
相关文章推荐
- mysql基于init-connect+binlog完成审计功能
- 通过init-connect + binlog 实现MySQL审计功能
- mysql基于init-connect+binlog完成审计功能
- 通过init-connect + binlog 实现MySQL审计功能
- mysql利用init-connect增加访问审计功能
- mysql利用init-connect增加访问审计功能的实现
- 通过init-connect + binlog 实现MySQL审计功能
- 通过init_connect + binlog 实现MySQL审计功能
- 通过init-connect + binlog 实现MySQL审计功能
- mysql init-connect + binlog的方法进行mysql的审计
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- mysql中使用sqldriverconnect()报错的解决
- MySQL审计之init-connect + binlog
- mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- 分页功能中使用的SQL语句 MySQL与SQL server
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- [转] 在 MySQL 数据库中使用 C 执行 SQL语句