mysql基于init-connect+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:创建用户数据库表

set names utf8
create database auditlog;
create table auditlog.t_audit(
  id int not null auto_increment,
  thread_id int not null,
  login_time timestamp,
  localname varchar(50) default null,
  matchname varchar(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;  #拼结授权语句……
flush privileges;

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

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:

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

[zejin] 3301>select * from auditlog.t_audit;
+----+-----------+---------------------+---------------------------+-------------------------+
| id | thread_id | login_time | localname | matchname |
+----+-----------+---------------------+---------------------------+-------------------------+
| 1 | 5 | 2016-08-10 11:01:07 | [email protected] | [email protected]% |
| 2 | 6 | 2016-08-10 11:02:02 | [email protected] | [email protected]% |
| 3 | 7 | 2016-08-10 11:19:54 | [email protected] | [email protected]% |
+----+-----------+---------------------+---------------------------+-------------------------+
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用户能登陆并修改此值

时间: 2024-10-06 00:31:43

mysql基于init-connect+binlog完成审计功能的相关文章

mysql 5.6 社区版上审计功能,不扯皮

官网 https://mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin/ 一.环境说明 MySQL 5.6.25 社区版 Mariadb 10.0.25 社区版 mysql 企业版有审计功能需要收费,社区版被阉割的不行不行了,和古时候的太监 没啥区别了,比较重要的功能特性都没有,不过也能凑合着用.可能说的有点过, 话糙理不糙,建议用不起企业版的可以考虑percona 和 mariadb,个人建议,仅供参考. 二.安装 1.下载mar

mysql利用init-connect增加访问审计功能的实现

mysql的连接首先都是要通过init-connect初始化,然后连接到实例. 我们利用这一点,通过在init-connect的时候记录下用户的thread_id,用户名和用户地址实现db的访问审计功能. 实现步骤 1.创建审计用的库表. 为了不与业务的库冲突,单独创建自己的库: #建库表代码 create database db_monitor ; use db_monitor ; CREATE TABLE accesslog ( thread_id int(11) DEFAULT NULL,

利用mysql注释实现无硬件成本的审计功能

目前mysql审计功能,大都是通过开启审计插件或者在中间件上吐出日志记录到相应的存储设备上,是可以实现审计功能的,但这些方法都需要额外的存储成本,对于体谅大的公司,也是一笔部小的开销. 目前我们维护的中间件系统,需要具有审计功能,最初的想法是将sql及操作来源记录到第三方系统,但是考虑成本问题.本人想到了利用mysql的注释功能,将操作的来源加入到mysql语句中,这样也实现了一定的审计功能呢. 好处: 注释的sql会记录到binlog(增,删,改操作),慢日志(操过指定时长的全部sql),全日

给MariaDB开启日志审计功能

如果很多运维或者开发都分配了数据库的操作权限的话,某一天表或者字段丢失了都无法找到谁干的,这个锅只能运维来背了,因此有必要给数据库的操作记录保存下来. 下面来演示下如何操作: 软件版本: MariaDB10.0.17    (自带了server_audit插件) MariaDB审计日志写到文件 安装server_audit插件 登陆进MariaDB,执行: > show variables like '%plugin%';  查看插件存放的目录 cd /usr/local/mariadb/lib

Mysql5.6审计功能

1. 前言 为了安全和操作的可追溯性考虑,越来越多的公司加入了审计功能.mysql5.5推出了相关的审计功能,到5.6.20功能进一步完善,算是勉强可用了,虽然细粒度方面做的不是太好,但是后续版本还是可以期待一下的.这里主要介绍下相关的功能和特性. 2. 开启审计 2.1 配置文件加载 mysql5.6中的审计是通过audit_log插件来实现的,我们可以在配置文件中加载该插件来开启. [mysqld] plugin-load=audit_log.so 如果希望数据库强制开启审计功能,如果不开启

数据库内置审计功能

作为一名dba,有时候,总会遇到数据库某个库,某个表,某个字段异常,或者数据被莫名的删除了,这个时候大家各种推断是不是bug了啊,是不是被黑了啊...这个时候一个审计功能就凸显出来了. mariadb数据库对审计插件(server_audit.so)支持比较良好,今天我们进行一个简单安装和测试 安装方法也很简单:INSTALL SONAME "server_audit.so" 这样就安装完成了,我们可以看看对应的参数变量 这些参数和变量都是可以动态设置的,具体参数说明,见官网:http

MySQL基于SSL协议的主从复制

数据对于大部分公司来说都是最重要的部分,而MySQL的服务器在同步数据时,默认是使用明文进行传输,所以接下来就来说说MySQL基于SSL协议进行密文传输数据的主从复制模式. 逻辑拓扑: 接下来的实验中Master节点服务器即使Master节点数据库服务器,同时也是CA. 环境准备: 一.主从服务器时间需要同步: [[email protected] ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address         S

InnoSQL HA Suite的实现原理与配置说明 InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync replicaiton)的功能 MySQL 5.6支持了crash safe功能

InnoSQL HA Suite的实现原理与配置说明  InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync replicaiton)的功能 MySQL 5.6支持了crash safe功能 http://www.innomysql.net/article/7403.html Virtual Sync Replication 搭建一个MySQL数据库的复制(replication)环境是相当简单的,这点是MySQL

Mysql 基于GTID的主从复制及切换

参考 http://imysql.com/tag/gtid http://mysqllover.com/?p=594 Mysql 基于GTID的主从复制及切换 一.主从复制配置 两个mysql服务的my.cnf 中相关内容配置 [mysqld] #从复制数据库表设置 replicate-wild-ignore-table = mysql.%,information_schema.%,innodb.%,innodb_log.%,performance_schema.%,test.%,tmp.% #