Percona Audit Log Plugin(mysql 审计)

背景:
当数据业务上或者其他的特殊情况时可能会进行审计,以便知道数据库当时所做的操作,今天给大家带来percona的审计插件

Percona Audit Log Plugin提供对特定服务器上执行的连接和查询活动的监视和记录。 有关活动的信息将存储在XML日志文件中,其中每个事件将具有其NAME字段,其自己的唯一RECORD_ID字段和TIMESTAMP字段。 此实现是MySQL Enterprise Audit Log Plugin的替代审计日志插件生成以下事件的日志:Audit - Audit事件表示审计日志记录已开始或已完成。 记录开始时NAME字段为Audit,日志记录完成时为NoAudit。 审计记录还包括服务器版本和命令行参数。

<AUDIT_RECORD
"NAME"="Audit"
"RECORD"="1_2014-04-29T09:29:40"
"TIMESTAMP"="2014-04-29T09:29:40 UTC"
"MYSQL_VERSION"="5.6.17-65.0-655.trusty"
"STARTUP_OPTIONS"="--basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306"
"OS_VERSION"="x86_64-debian-linux-gnu",
/>
Connect/Disconnect - Connect record event will have NAME field Connect when user logged in or login failed, or Quit when connection is closed. Additional fields for this event are CONNECTION_ID, STATUS, USER, PRIV_USER, OS_LOGIN, PROXY_USER, HOST, and IP. STATUS will be 0 for successful logins and non-zero for failed logins.
Example of the Disconnect event:

<AUDIT_RECORD
"NAME"="Quit"
"RECORD"="24_2014-04-29T09:29:40"
"TIMESTAMP"="2014-04-29T10:20:13 UTC"
"CONNECTION_ID"="49"
"STATUS"="0"
"USER"=""
"PRIV_USER"=""
"OS_LOGIN"=""
"PROXY_USER"=""
"HOST"=""
"IP"=""
"DB"=""
/>

1,安装:

审核日志插件随Percona Server一起提供,但默认情况下不会安装。要启用该插件,您必须运行以下命令

INSTALL PLUGIN audit_log SONAME ‘audit_log.so‘;

验证插件是否安装成功

SHOW PLUGINS;

+--------------------------------+----------+--------------------+--------------+---------+
| Name | Status | Type | Library | License |
+--------------------------------+----------+--------------------+--------------+---------+
...
| audit_log | ACTIVE | AUDIT | audit_log.so | GPL |
+--------------------------------+----------+--------------------+--------------+---------+

2,日志格式:

审核日志插件支持四种日志格式:OLD,NEW,JSON和CSV。 OLD和NEW格式基于XML,前者将日志记录属性输出为XML属性,后者输出为XML标记。 记录的信息在所有四种格式中都是相同的。 日志格式选择由audit_log_format变量控制。

<AUDIT_RECORD>
<NAME>Quit</NAME>
<RECORD>10902_2014-04-28T11:02:54</RECORD>
<TIMESTAMP>2014-04-28T11:02:59 UTC</TIMESTAMP>
<CONNECTION_ID>36</CONNECTION_ID>
<STATUS>0</STATUS>
<USER></USER>
<PRIV_USER></PRIV_USER>
<OS_LOGIN></OS_LOGIN>
<PROXY_USER></PROXY_USER>
<HOST></HOST>
<IP></IP>
<DB></DB>
</AUDIT_RECORD>

3,实战:
以下示例显示添加将受监控的用户

mysql> SET GLOBAL audit_log_include_accounts = ‘[email protected],[email protected]‘;
Query OK, 0 rows affected (0.00 sec)
If you you try to add users to both include and exclude lists server will show you the following error:

mysql> SET GLOBAL audit_log_exclude_accounts = ‘[email protected],[email protected]‘;
ERROR 1231 (42000): Variable ‘audit_log_exclude_accounts‘ can‘t be set to the value of ‘[email protected],[email protected]‘
To switch from filtering by included user list to the excluded one or back, first set the currently active filtering variable to NULL:

mysql> SET GLOBAL audit_log_include_accounts = NULL;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL audit_log_exclude_accounts = ‘[email protected],[email protected]‘;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL audit_log_exclude_accounts = "‘user‘@‘host‘";
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL audit_log_exclude_accounts = ‘‘‘user‘‘@‘‘host‘‘‘;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL audit_log_exclude_accounts = ‘\‘user\‘@\‘host\‘‘;
Query OK, 0 rows affected (0.00 sec)
To see what users are currently in the on the list you can run:

mysql> SELECT @@audit_log_exclude_accounts;
+------------------------------+
| @@audit_log_exclude_accounts |
+------------------------------+
| ‘user‘@‘host‘ |
+------------------------------+
1 row in set (0.00 sec)

--备注:监控的用户名必须和mysql.user里用户名一致,不然不生效

<AUDIT_RECORD
NAME="Connect"
RECORD="4971917_2016-08-22T09:09:10"
TIMESTAMP="2016-08-22T09:12:21 UTC"
CONNECTION_ID="6"
STATUS="0"
USER="user1" ;; this is a ‘user‘ part of account in 5.7
PRIV_USER="user1"
OS_LOGIN=""
PROXY_USER=""
HOST="localhost" ;; this is a ‘host‘ part of account in 5.7
IP=""
DB=""
/>

过渡掉user1(排除user1)

SET GLOBAL audit_log_exclude_accounts = ‘[email protected]%‘;

总结:
1,数据库审计是一个非常实用和重要的功能
2,一般情况下不会开启这个功能,因为对性能消耗比较大
3,percona提供了这个功能,原生的Mysql社区版是没有的,只有企业版才有

原文地址:http://blog.51cto.com/538858/2327515

时间: 2024-10-14 16:29:26

Percona Audit Log Plugin(mysql 审计)的相关文章

mysql审计实现方法

Mysql版本: 5.6.24-72.2 一.通过init-connect + binlog 实现MySQL审计功能 基本原理: 由于审计的关键在于DML语句,而所有的DML语句都可以通过binlog记录. 不过遗憾的是目前MySQL binlog 中只记录,产生这条记录的connection id(随连接数自增,循环使用),这对之后的反查没有任何帮助. 因此考虑通过init-connect,在每次连接的初始化阶段,记录下这个连接的用户,和connection_id信息. 在后期审计进行行为追踪

mysql 审计server_audit 模块

server_audit模块是一个 mariadb  还是skysql 开发的一个mysql 的插件.可以做一些审计上面的工作. 众所周知,mysql 是里面是很难记录用户的操作命令的.用这个就可以.支持两种格式的输出,file 或者syslog. 1.安装 INSTALL PLUGIN server_audit SONAME 'server_audit';server_audit.so 可以用skysql 上面下载,mariadb 10 里面已经自带了.非常好用. 2.配置 show vari

Percona Xtrabackup快速备份MySQL

Percona Xtrabackup快速备份MySQL 提交 我的评论 加载中 已评论 Percona Xtrabackup快速备份MySQL 2015-07-10 Linux中国 Linux中国 Linux中国 微信号 linux-cn 功能介绍 面向Linux爱好者,提供Linux技术文章.新闻资讯和交流平台. 每天推送一条最新精选Linux资讯和技术文章:支持Linux命令查询.Linux资讯搜索及微信群的交流. 老规矩,开场白,刚开始用mysqldump,备份100G+的数据库,再加上服

Ubuntu下rsyslog集中收集mysql审计日志

服务端 1.安装最新版本rsyslog sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository ppa:adiscon/v8-stable sudo apt-get update sudo apt-get install rsyslog 2.配置目录存储mysql审计日志 vim /etc/rsyslog.d/50-default.conf # add:

fluentd 推送 mariadb audit log

说明: mariadb audit log是 mariadb 的审计日志 目的是把日志拆分成 tab 键分隔的字段 直接附上 fluentd 配置文件 <system> log_level error </system> <source> @type tail path /data/logs/mariadb/server_audit.log tag mysql_audit pos_file /data/logs/mariadb/fluentd.pos <parse

Zabbix 中使用 Percona Monitoring Plugins 监控 MySQL

Zabbix 中使用 Percona Monitoring Plugins 监控 MySQL 1.安装zabbix agent [[email protected] ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-agent-3.2.0-1.el7.x86_64.rpm [[email protected] ~]# yum install zabbix-agent 2.修改配置 [[email protect

mysql审计插件设置

1.create database auditdb use auditdb 2.create table accesslog(ID int primary key auto_increment,ConnectionID int,ConnUser varchar(30),MatchUser varchar(30),LoginTime datetime) 3.保证所有连接用户对此表有写入权限 insert into mysql.db(Host,Db,User,Insert_priv) values

Linux Audit log

Background:linux操作系统 如果发现一个进程不明被杀掉 而且也不知道被哪一个进程杀掉的,如果我们不知道 可以通过 Configuration: 1). root登录并打开audit.rules文件,位于/etc/audit/文件夹下. 添加以下内容:-a always,exit -F arch=b64 -S kill -k *wg934* Note: 如果坏境是32位请 改为 -F arch=b32*wg934* 只是后面的标记, 方面查看用的 没特别意思 2). 重启aduitd

mysql general log 查看mysql 执行历史

我们有时候需要查看mysql的执行历史,比如我们做sql优化的时候,起码要知道执行的sql是什么,框架一般会帮我们拼装sql,所以在程序中不一定能够打印出sql,这个时候就需要mysql的general log了. 查看设置mysql genneral log show VARIABLES like '%general_log%'; set GLOBAL general_log = off;// on-打开; off-关闭 general_log ON general_log_file /var