MySQL审计工具Audit Plugin安装使用
本实验的审计插件均是安装在 mysql-community-server-5.7.9 的服务器上。
插件安装(社区版)
插件下载地址:
https://bintray.com/mcafee/mysql-audit-plugin/release#files
解压:
# unzip audit-plugin-mysql-5.7-1.1.--linux-x86_64.zip
Archive: audit-plugin-mysql-5.7-1.1.--linux-x86_64.zip
creating: audit-plugin-mysql-5.7-1.1.-/
creating: audit-plugin-mysql-5.7-1.1.-/lib/
inflating: audit-plugin-mysql-5.7-1.1.-/lib/libaudit_plugin.so
inflating: audit-plugin-mysql-5.7-1.1.-/COPYING
inflating: audit-plugin-mysql-5.7-1.1.-/THIRDPARTY.txt
inflating: audit-plugin-mysql-5.7-1.1.-/README.txt
inflating: audit-plugin-mysql-5.7-1.1.-/plugin-name.txt
creating: audit-plugin-mysql-5.7-1.1.-/utils/
查看MySQL的插件目录:
> show variables like 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| plugin_dir | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+
复制库文件到MySQL库目录下:
# cp audit-plugin-mysql-5.7-1.1.-/lib/libaudit_plugin.so /usr/local/mysql/lib/plugin/
# chmod a+x libaudit_plugin.so
进入mysql命令窗口,安装插件:
> install plugin audit soname 'libaudit_plugin.so';
Query OK, 0 rows affected (0.06 sec)
查看mysql当前已经加载了哪些插件:
> show plugins;
+----------------------------+----------+--------------------+--------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+--------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
…………
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ngram | ACTIVE | FTPARSER | NULL | GPL |
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL |
| rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL |
| AUDIT | ACTIVE | AUDIT | libaudit_plugin.so | GPL |
+----------------------------+----------+--------------------+--------------------+---------+
查看版本:
> show global status like '%audit%';
+------------------------+-----------+
| Variable_name | Value |
+------------------------+-----------+
| Audit_protocol_version | 1.0 |
| Audit_version | 1.1.4-725 |
+------------------------+-----------+
开启Audit功能:
> SET GLOBAL audit_json_file=ON;
Query OK, 0 rows affected (0.00 sec)
执行任何语句(默认会记录任何语句,有语法错误的不会记录),然后去mysql数据目录查看mysql-audit.json文件(默认为该文件)。
插入一些数据,查看一下mysql-audit.json文件信息(json格式),如下:
{
"msg-type": "activity",
"date": "",
"thread-id": "",
"query-id": "",
"user": "root",
"priv_user": "root",
"ip": "",
"host": "localhost",
"connect_attrs": {
"_os": "linux-glibc2.5",
"_client_name": "libmysql",
"_pid": "",
"_client_version": "5.7.9",
"_platform": "x86_64",
"program_name": "mysql"
},
"pid": "",
"os_user": "root",
"appname": "mysql",
"rows": "",
"cmd": "insert",
"objects": [
{
"db": "part",
"name": "e",
"obj_type": "TABLE"
}
],
"query": "insert into e values (9898,'smart','james')"
}
可以查看插件有哪些可配置的参数:
mysql> SHOW GLOBAL VARIABLES LIKE '%audi%';
其中我们需要关注的参数有:
1. audit_json_file
是否开启audit功能。
2. audit_json_log_file
记录文件的路径和名称信息(默认放在mysql数据目录下)。
3. audit_record_cmds
audit记录的命令,默认为记录所有命令。可以设置为任意dml、dcl、ddl的组合。如:audit_record_cmds=select,insert,delete,update。还可以在线设置set global audit_record_cmds=NULL。(表示记录所有命令)
4. audit_record_objs
audit记录操作的对象,默认为记录所有对象,可以用SET GLOBAL audit_record_objs=NULL设置为默认。也可以指定为下面的格式:audit_record_objs=,test.*,mysql.*,information_schema.*。
5. audit_whitelist_users
用户白名单。
详细的参数说明,可以直接访问官方说明:
https://github.com/mcafee/mysql-audit/wiki/Configuration
最后为了保证重启数据库,配置不丢失,修改my.cnf 配置文件,将下面的配置添加到[mysqld]中,所以在配置文件中my.cnf加入参数:
- audit_json_file=on #保证mysql重启后自动启动插件
- plugin-load=AUDIT=libaudit_plugin.so #防止删除了插件,重启后又会加载
- audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate' #要记录哪些命令语句,因为默认记录所有操作;
保存重启即可看到效果。
插件卸载
直接执行 UNINSTALL PLUGIN AUDIT 卸载会报错:
> uninstall plugin AUDIT;
ERROR 1148 (42000): Uninstall AUDIT plugin disabled > set audit_uninstall_plugin=on;
ERROR 1238 (HY000): Variable 'audit_uninstall_plugin' is a read only variable
需要在 my.cnf 中 [mysqld] 下添加 audit_uninstall_plugin=1,重启mysql。重启完毕后执行两次 UNINSTALL PLUGIN AUDIT; 即可卸载。
> UNINSTALL PLUGIN AUDIT;
ERROR 1620 (HY000): Uninstall AUDIT plugin must be called again to complete
> UNINSTALL PLUGIN AUDIT;
Query OK, 0 rows affected, 1 warning (0.01 sec)
卸载完成后需要从 my.cnf 中删除 audit_uninstall_plugin=1 ,否则下次mysql启动会报错:[ERROR] /data/mysql/bin/mysqld: unknown variable 'audit_uninstall_plugin=1'
MariaDB server_audit 审计插件
MySQL 社区版还可以安装 MariaDB 的审计插件,安装方法同上面的基本一致。
下载地址:https://mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin/ (也可以直接下载MariaDB对应的版本后,解压后在plugin目录下有server_audit.so插件)
MariaDB_5.5.37版本和MariaDB_10.0.10以后版本的audit插件支持MariaDB, MySQL、Percona Server使用。
MariaDB_5.x.x 和 MariaDB_10.x.x 区别:
MariaDB_5.x.x:兼容MySQL5.x.x的,接口几乎一致,只限于社区版
MariaDB_10.x.x:10.x.x使用新技术,接口会与mysql逐渐区别开来。目标就是以后想MariaDB新接口过渡。
这里采用的是下载 MariaDB 二进制安装包,解压获取 server_audit.so 插件,版本为5.5.58,下载地址:mariadb-5.5.58-linux-x86_64.tar.gz ,下载解压后,复制 mariadb-5.5.58-linux-x86_64/lib/plugin 下的 server_audit.so 到 /usr/local/mysql/lib/plugin 下,添加 +x 权限。然后安装:
mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
查看变量开启设置情况,默认貌似都是关闭的:
> show variables like '%server_audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_loc_info | |
| server_audit_logging | OFF |
| server_audit_mode | 1 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
可以在 my.cnf 中添加如下配置,然后重启 mysqld:
server_audit_events='CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL' #备注:指定哪些操作被记录到日志文件中
server_audit_logging=on
server_audit_file_path =/data/mysql/auditlogs/ #备注:审计日志存放路径,该路径下会生成一个server_audit.log文件,就会记录相关操作记录了
server_audit_file_rotate_size=200000000
server_audit_file_rotations=200
server_audit_file_rotate_now=ON
也可以动态开启审计功能:
> set global server_audit_logging=on;
Query OK, 0 rows affected (0.00 sec)
默认在mysql的数据目录下生成文件 server_audit.log ,日志格式为:
20171107 17:56:16,CentOS6.6-Slave1,,,4,11,QUERY,,'select host,user,plugin from mysql.users',1146
20171107 18:26:00,CentOS6.6-Slave1,,,4,13,QUERY,,'insert into t values (7)',0 20171107 18:27:49,CentOS6.6-Slave1,,,4,15,QUERY,,'shows',1064 #语法错误的语句也会被记录
可以看到,MariaDB的审计插件日志要比MySQL社区插件简洁许多。
参数说明:(请参考:https://mariadb.com/kb/en/mariadb/server_audit-system-variables/)
server_audit_output_type:指定日志输出类型,可为SYSLOG或FILE
server_audit_logging:启动或关闭审计
server_audit_events:指定记录事件的类型,可以用逗号分隔的多个值(connect,query,table),如果开启了查询缓存(query cache),查询直接从查询缓存返回数据,将没有table记录
server_audit_file_path:如server_audit_output_type为FILE,使用该变量设置存储日志的文件,可以指定目录,默认存放在数据目录的server_audit.log文件中
server_audit_file_rotate_size:限制日志文件的大小
server_audit_file_rotations:指定日志文件的数量,如果为0日志将从不轮转
server_audit_file_rotate_now:强制日志文件轮转
server_audit_incl_users:指定哪些用户的活动将记录,connect将不受此变量影响,该变量比server_audit_excl_users优先级高
server_audit_syslog_facility:默认为LOG_USER,指定facility
server_audit_syslog_ident:设置ident,作为每个syslog记录的一部分
server_audit_syslog_info:指定的info字符串将添加到syslog记录
server_audit_syslog_priority:定义记录日志的syslogd priority
server_audit_excl_users:该列表的用户行为将不记录,connect将不受该设置影响
server_audit_mode:标识版本,用于开发测试
卸载 server_audit
mysql> UNINSTALL PLUGIN server_audit;
mysql> show variables like '%audit%';
Empty set (0.00 sec)
防止 server_audit 插件被卸载,需要在配置文件中添加:
[mysqld]
server_audit=FORCE_PLUS_PERMANENT
重启MySQL生效
mysql> UNINSTALL PLUGIN server_audit;
ERROR 1702 (HY000): Plugin 'server_audit' is force_plus_permanent and can not be unloaded
值得注意的是,应该在server_audit插件被安装好,并且已经运行之后添加这些配置,否则过早在配置文件添加这个选项,会导致MySQL发生启动错误!
MySQL Enterprise Audit Plugin
MySQL 企业版的 Enterprise Edition 中自带 Audit Plugin ,名为 audit_log.so ,安装也很简单:
> install plugin audit_log soname 'audit_log.so';
默认在 datadir 目录下生成 audit.log ,其格式为 xml ,下面举几个例子。
#退出 mysql shell
<AUDIT_RECORD>
<TIMESTAMP>2017-11-09T03:28:23 UTC</TIMESTAMP>
<RECORD_ID>4_2017-11-09T03:23:12</RECORD_ID>
<NAME>Quit</NAME>
<CONNECTION_ID>3</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP/>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<CONNECTION_TYPE>Socket</CONNECTION_TYPE>
</AUDIT_RECORD>
# 登录失败,用户名或密码错误,错误码 1045
<AUDIT_RECORD>
<TIMESTAMP>2017-11-09T03:28:25 UTC</TIMESTAMP>
<RECORD_ID>5_2017-11-09T03:23:12</RECORD_ID>
<NAME>Connect</NAME>
<CONNECTION_ID>4</CONNECTION_ID>
<STATUS>1045</STATUS>
<STATUS_CODE>1</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP/>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<CONNECTION_TYPE>Socket</CONNECTION_TYPE>
<PRIV_USER>root</PRIV_USER>
<PROXY_USER/>
<DB/>
</AUDIT_RECORD>
# 登录成功 STATUS=0
<AUDIT_RECORD>
<TIMESTAMP>2017-11-09T03:29:43 UTC</TIMESTAMP>
<RECORD_ID>6_2017-11-09T03:23:12</RECORD_ID>
<NAME>Connect</NAME>
<CONNECTION_ID>5</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP/>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<CONNECTION_TYPE>Socket</CONNECTION_TYPE>
<PRIV_USER>root</PRIV_USER>
<PROXY_USER/>
<DB/>
</AUDIT_RECORD>
# 执行命令 show_variables
<AUDIT_RECORD>
<TIMESTAMP>2017-11-09T03:31:12 UTC</TIMESTAMP>
<RECORD_ID>9_2017-11-09T03:23:12</RECORD_ID>
<NAME>Query</NAME>
<CONNECTION_ID>5</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root[root] @ localhost []</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP/>
<COMMAND_CLASS>show_variables</COMMAND_CLASS>
<SQLTEXT>show global variables like '%audit%'</SQLTEXT>
</AUDIT_RECORD>
注意:企业版 audit plugin 也会记录语法错误的sql语句。
# 各标签元素解释
<audit>:文件的根标签为<AUDIT>,并以 </AUDIT>为结束标签
<AUDIT_RECORD> :包含一系列的必选标签和可选标签,可选标签是否出现取决于audit record类型。
<NAME>:必选,例如<NAME>Query</NAME>,可能出现的值还包含Audit, Binlog Dump, Change user, Close stmt, Connect Out, Connect, Create DB, Daemon, Debug, Delayed insert, Drop DB,
Execute, Fetch, Field List, Init DB, Kill, Long Data, NoAudit, Ping, Prepare, Processlist, Query, Quit, Refresh,
Register Slave, Reset stmt, Set option, Shutdown, Sleep, Statistics, Table Dump, Time.
<RECORD_ID>:必选,例如<RECORD_ID>28743_2013-09-18T21:03:24</RECORD_ID>,包含一些列数字和时间戳,数字表示的是记录数,每增加一条记录,数字加1.
<TIMESTAMP>:必选,例如<TIMESTAMP>2013-09-17T15:03:49 UTC</TIMESTAMP>,包含时间戳和时区两部分,记录的是从客户端接收到的sql执行完时刻的时间。 # 以下标签audit record类型决定是否出现
<COMMAND_CLASS>:命令的类型。例如<COMMAND_CLASS>drop_table</COMMAND_CLASS>.
<CONNECTION_ID>:例如<CONNECTION_ID>127</CONNECTION_ID>,代表客户端连接标识符的无符号整型数字。
<DB>:mysql连接的默认数据库名称,该标签只在 <NAME>值是Connect或Change user时出现.
<HOST>:client端的主机名,该标签只在 <NAME>值是Connect,Change user或Query时出现,例如<HOST>localhost</HOST>。
<IP>:client端的IP地址,该标签只在 <NAME>值是Connect,Change user或Query时出现,例如<IP>127.0.0.1</IP>。
<MYSQL_VERSION>:mysql版本号,只在 <NAME>值是Audit时出现,例如<MYSQL_VERSION>5.7.1-m11-log</MYSQL_VERSION>
<OS_LOGIN>:外部用户,该标签只在 <NAME>值是Connect,Change user或Query时出现。
<OS_VERSION>:表示运行数据库的服务器的操作系统,只在 <NAME>值是Audit时出现,例如<OS_VERSION>x86_64-Linux</OS_VERSION>。
<PRIV_USER>:服务器认证的客户端名称。该标签只在 <NAME>值是Connect或Change user时出现。例如<PRIV_USER>root</PRIV_USER>。
<PROXY_USER>:通过proxy连接到mysql的用户。该标签只在 <NAME>值是Connect或Change user时出现。
<SERVER_ID>:mysql数据库服务器的ID号,该标签只在 <NAME>值是Audit或No Audit时出现。例如<SERVER_ID>1</SERVER_ID>。
<SQLTEXT>:实际执行的SQL语句。该标签只在 <NAME>值是 Query 或 Execute时出现。例如<SQLTEXT>DELETE FROM t1</SQLTEXT>。
<STARTUP_OPTIONS>:mysql数据库启动选项,该标签只在 <NAME>值是Audit时出现,例如<STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld --port=3306 --log-output=FILE</STARTUP_OPTIONS>
<STATUS>:代表sql命令的执行状态,0表示成功,其余表示有错误。例如<STATUS>1051</STATUS>。
<STATUS_CODE>:代表sql命令的执行状态,0表示成功,1表示有错误。例如<STATUS_CODE>0</STATUS_CODE>。
<USER>:客户端连接mysql服务器的用户名。例如<USER>root[root] @ localhost [127.0.0.1]</USER>。
<VERSION>:表示日志文件格式的版本号。该标签只在 <NAME>值是Audit时出现。例如<VERSION>1</VERSION>。
MySQL审计工具Audit Plugin安装使用的更多相关文章
- MySQL性能测试工具sysbench的安装和使用
sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前 ...
- mysql审计插件-记录所有sql语句
https://www.58jb.com/html/160.html https://www.jianshu.com/p/a0e0aec3cb6f MySQL审计工具Audit Plugin安装使用 ...
- 4.mysql(slow_log/generic_log/audit)
一.慢查询日志进阶 <1>相关参数 1.slow_query_log #是否开启慢查询日志 2.slow_query_log_file #慢查询日志文件名,在my.cnf我们已经定义为sl ...
- mysql审计插件
Audit Plugin安装使用 原文: https://www.cnblogs.com/waynechou/p/mysql_audit.html#_label0 #有卸载方法 下载地址: htt ...
- 关于Mysql Enterprise Audit plugin的使用
正如之前看到的一篇文章,假设想要知道是谁登陆了你的数据库server,干了什么东西,那么你须要使用Mysql Enterprise Audit plugin. 以下介绍一下Mysql Enterpri ...
- 使用MySQL审计Plugin
本文来源:http://blog.chinaunix.net/uid-20785090-id-5018977.html 越来越多的企业把应用往mysql上迁移,这时候对数据库的审计又成了一件紧急的事情 ...
- MySQL审计audit
导读: MySQL社区版是不带审计功能的,如果要使用MySQL审计,可以考虑使用中间件(例如proxysql)或者是MariaDB的审计插件.这里以MariaDB的审计插件为例,实现MySQL 5.7 ...
- MySQL Server类型之MySQL客户端工具的下载、安装和使用
本博文的主要内容有 .MySQL Server 5.5系列的下载 .MySQL Server 5.5系列的安装 .MySQL Server 5.5系列的使用 .MySQL Server 5.5系列的卸 ...
- MySQL Workbench类型之MySQL客户端工具的下载、安装和使用
本博文的主要内容有 .MySQL Workbench的下载 .MySQL Workbench的安装 .MySQL Workbench的使用 个人推荐,比较好的MySQL客户端工具 注意啊! 对于noi ...
随机推荐
- 采集练习(十) php 获得电视节目预告---数据来自搜视网
前几天逛湖南卫视,偶然间发现它的网站上也有节目预告,一看源码,居然是来自搜视网的xml,于是就想获得它的数据(页面直接ajax加载估计会有跨域问题) 前阵子也写过另一个方法获得 节目预告(采集练习(七 ...
- iPad actionsjeet
在iphone和ipad上使用UIActionShee控件t的效果会不一样,在苹果的官方文档中有相关说明: 在ipad上使用UIActionSheet控件改控件不再从底部弹出,而是从屏幕中间弹出与UI ...
- Linux中常用文件传输命令及使用方法
sftp sftp即Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中 ...
- VLAN(虚拟局域网)划分
VLAN根据不同的需求,可以有多种划分方式: 一:静态划分 基于端口 按VLAN交换机上的物理端口和内部的PVC(永久虚电路)端口来划分 静态划分安全.可靠,易于配置与维护 二 ...
- [Shell]Tetris Game
这篇文章主要介绍Shell脚本编写俄罗斯方块的方法,原文来自脚本之家,http://www.jb51.net/article/48926.htm 效果图: 代码: #!/bin/bash # Tetr ...
- HDU5875Function(单调队列)
The shorter, the simpler. With this problem, you should be convinced of this truth. You are giv ...
- DDP入门
DDP,即动态动态规划,可以用于解决一类带修改的DP问题. 我们从一个比较简单的东西入手,最大子段和. 带修改的最大子段和其实是常规问题了,经典的解决方法是用线段树维护从左,右开始的最大子段和和区间最 ...
- 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...
- BLE Mesh网络协议综述
0 引言 自2012年蓝牙4.0规范推出之后,全新的蓝牙低功耗(BLE)技术由于其极低的运行和待机功耗.低成本和跨厂商互操作性,3 ms低延迟.AES-128加密等诸多特色,可以用于计步器.心律监视器 ...
- 算法导论笔记——第十八章 B树
18.1 B树的定义 18.2 B树的基本操作 与一棵二叉搜索树一样,可以在从树根到叶子这个单程向下过程中将一个新的关键字插入B树中.为了做到这一点,当沿着树向下查找新的关键字所属位置时,就分裂沿途 ...