最近因为一些原因, mysql 需要安装审计插件来追踪数据;
花了将近 2 个下午的时间一直在安装, 查找各种资料, 因为各种问题始终安装不成功, 截止目前终于成功了,简单记录一下, 也希望以后有人需要安装的时候少走一些弯路;
注意以下是弯路部分:
网上找到找到最多的就是 mysql-audit-plugin 插件的安装,
如: https://www.cnblogs.com/gaoyanbing/p/14030395.html
需要先去::https://bintray.com/mcafee/mysql-audit-plugin/release/1.1.4-725#files
下载软件然后…., 实际上, 这个地址早已经失效了, 我还花了 10 块钱 去付费下载别人已经上传在空间的此插件, 最终还是安装不成功, 大概如下:
首先在安装过程中, 会遇到: ERROR 1123 (HY000): Can’t initialize function ‘audit’; Plugin initialization function failed.
即使我按照博客说的配置了很多东西, 还是会提示这个错误,
这个错误, 查了百度谷歌很多资料都是 初始化 audit_offset 时候的问题, 我还找到有人一点一点删除
audit_offsets = 7824, 7872, 3632, 4792, 456, 360, 0, 32, 64, 160, 536, 7988, 4360, 3648, 3656, 3660, 6072, 2072, 8, 7056, 7096, 7080
从后到前面一个一个删除来测试, 删除到某一个就能成功 / 吐血.jpg, 每次修改都需要重启 mysql, 然后一点一点测试,
其实我最终还是没有成功,
再后来, 我查看 mysql 的 错误 log
Plugin ‘AUDIT’ registration as a AUDIT failed.
还是没有解决, 当然还有其他很多很多东西的尝试都没有成功, mysql 版本从 8.0, 换到 5.7, 换到 …5.5 , 当我快要放弃的时候,
查到另一个审计插件, MySQL Community Server
因为我发现: 为社区版提供审计的插件的主要有以下三个 McAfee MySQL Audit Plugin、Percona Audit Log Plugin、MariaDB Audit Plugin。
既然社区提供了多个插件, 都是可以做审计, 为什么要死抓住一个不放呢`
于是开始安装另一个;
首先我们查看自己 mysql 的版本, 找到后开始下载, 我当前的 mysql 已经是 5.5.62
于是找到 5.5.62 对应的 插件下载:
可以在这个网址寻找自己需要的版本: https://downloads.mariadb.org/mariadb/+releases/
下载成功后, 因为我是 liunx 系统, 从下载的包里面寻找 server_audit.so, 如果是 windows, 则需要寻找 server_audit.dll
我是直接搜索文档找到: 大概位置是在下载包里面的额 lib/plugins/server_audit.so
找到后直接把文件复制到 mysql 的插件目录里, 之后的安装方法和 mysql 安装其他插件都是一样的!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
mysql> SHOW GLOBAL VARIABLES LIKE 'plugin_dir'; +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | plugin_dir | /www/server/mysql/lib/plugin/ | +---------------+-------------------------------+ 1 row in set (0.00 sec) mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so'; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%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 | +-------------------------------+-----------------------+ 16 rows in set (0.00 sec) |
可以看到很丝滑的就装上了, 顺利的让我有点吃惊😲~~
之后就是对于插件的一些配置:
下面是简单的配置记录
1、安装成功,通过如下命令可以查看初始化参数配置。
mysql> show variables like ‘%audit%’;
2、执行如下命令开启mysql审计功能,
备注:指定哪些操作被记录到日志文件中
set global server_audit_events=’CONNECT,QUERY,TABLE,QUERY_DDL’
备注:开启审计功能
set global server_audit_logging=on
备注:默认存放路径,可以不写,默认到data文件下
set global server_audit_file_path =/data/mysql/auditlogs/
备注:设置文件大小
set global server_audit_file_rotate_size=200000000
指定日志文件的数量,如果为0日志将从不轮转
set global server_audit_file_rotations=200
强制日志文件轮转
set global server_audit_file_rotate_now=ON
可到data文件下查看日志文件server_audit.log。
可从中查看各项操作,可以发现什么时间那个用户执行了什么操作,便于责任追究。
在控制台中用命令行配置的参数只对本次服务有效果,服务重启配置全部初始化了,因此想长久配置需要再my.ini文件(中添加相应的配置信息。配置信息如下,需要更多参数的可自行添加。需要添加到[mysqld]下方,重启服务配置生效。
#备注: 防止server_audit 插件被卸载
server_audit=FORCE_PLUS_PERMANENT
#备注:指定哪些操作被记录到日志文件中
server_audit_events=’CONNECT,QUERY,TABLE,QUERY_DDL’
server_audit_logging=on
server_audit_file_rotate_size=200000001
server_audit_file_rotations=200
server_audit_file_rotate_now=ON
参数配置说明:
详细请参考:
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:标识版本,用于开发测试
若不知道最后审计 log 存在了哪里, 可以这么查看 mysql data 目录
1 |
show global variables like 'datadir'; |
找到后在此目录寻找: server_audit.log
默认插件是关闭的,需要手动开启:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
mysql> set global server_audit_logging=ON; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%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 | ON | | 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 | +-------------------------------+-----------------------+ 16 rows in set (0.00 sec) mysql> |
关于需要开启那些操作的记录: 重点说明 server_audit_events
省略值全部事件类型都会记录到审计日志中,可选择事件类型才记录。
如 server_audit_events = query,table,query_ddl,query_dml
事件类型
CONNECT:连接、断开连接和失败的连接,包括错误代码
QUERY:以纯文本形式执行的查询及其结果,包括由于语法或权限错误而失败的查询
TABLE:受查询执行影响的表
QUERY_DDL:与QUERY相同,但只筛选DDL类型的查询(create、alter、drop、rename和truncate语句,create/drop[procedure/function/user]和rename user除外(它们不是DDL)
QUERY_DML:与QUERY相同,但只筛选DML类型的查询(do、call、load data/xml、delete、insert、select、update、handler和replace语句)
QUERY_DCL:与QUERY相同,但只筛选DCL类型的查询(create user、drop user、rename user、grant、revoke和set password语句)
QUERY_DML_NO_SELECT:与QUERY_DML相同,但不记录SELECT查询。(从1.4.4版开始)(do、call、load data/xml、delete、insert、update、handler和replace语句)