MySQL 使用开源审计插件

文若2年前技术文章789

前言

MySQL 只有企业版有审计插件,开源社区版没有审计插件。企业要通过等保需要开通审计,这里记录使用 MariaDB 开源审计插件,让 MySQL 社区版拥有审计功能。

1. 审计插件下载

审计插件是包含在 MariaDB 中的,所以需要先下载 MariaDB 然后将 server_audit.so 审计插件 copy 出来。

MariaDB 的 10.1 版本对应与 Oracle 的 MySQL 5.7 版本,这里是  MariaDB 官方下载地址 可以从链接里下载 MariaDB。

tar -zxvf mariadb-10.1.48-linux-systemd-x86_64.tar.gz

进入 /lib/plugin/ 目录可以找到 server_audit.so 审计插件:

ll ./mariadb-10.1.48-linux-systemd-x86_64/lib/plugin/server_audit.so
-rw-r--r-- 1 esadmin mysql 245036 Oct 30  2020 ./mariadb-10.1.48-linux-systemd-x86_64/lib/plugin/server_audit.so

接下来,需要将插件 copy 到 MySQL 插件目录里面,可以执行下方 SQL 查询 MySQL base 目录:

select @@basedir;
+-------------------+
| @@basedir         |
+-------------------+
| /usr/local/mysql/ |
+-------------------+

MySQL 插件目录在 basedir/lib/plugin/ 下面,将插件 copy 到此目录:

cp /pg_data/mariadb-10.1.48-linux-systemd-x86_64/lib/plugin/server_audit.so /usr/local/mysql/lib/plugin/

修改文件属组,然后连接 MySQL 安装插件:

install plugin server_audit SONAME 'server_audit.so';

通过下方命令确认插件是否启动成功 Status = ACTIVE:

show plugins;
......
+----------------------------+----------+--------------------+-----------------+---------+
| Name                       | Status   | Type               | Library         | License |
+----------------------------+----------+--------------------+-----------------+---------+
| SERVER_AUDIT               | ACTIVE   | AUDIT              | server_audit.so | GPL     |
+----------------------------+----------+--------------------+-----------------+---------+

2. 审计插件参数

通过下方参数可以查看审计插件涉及到的参数:

root@mysql 14:33:  [(none)]>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              |
+-------------------------------+-----------------------+

2.1 server_audit_events

该参数设置需要保存哪些类型的 SQL 语句,可以保存的类型有: CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT

如果没有设置该参数,将记录所有类型的 SQL 语句。

2.2 server_audit_excl_users

用户列表,设置后表示该列表的用户行为将不会被记录,相当于一个黑名单。

2.3 server_audit_output_type

指定日志输出类型,可为 SYSLOG 或 FILE,默认和推荐使用的模式都是 FILE 模式。

2.4 server_audit_file_path

当 server_audit_output_type=file 时,通过该参数可以设置日志存放目录,默认为 server_audit.log 表示在数据目录。

2.5 server_audit_file_rotate_now

强制日志文件轮转。

2.6 server_audit_file_rotate_size

限制日志文件的大小,默认为 1000000

2.7 server_audit_file_rotations

日志轮转的次数,默认为 0 表示不轮转。

2.8 server_audit_incl_users

用户列表,设置后表示哪些用户的操作需要被记录,优先级高于 server_audit_excl_users 参数列表。

2.9 server_audit_loc_info

记录内部信息,用户可忽略。

2.10 server_audit_logging

默认为 OFF,设置为 ON 表示打开审计日志记录。

2.11 server_audit_mode

内核人员开发调试使用的参数,用户可忽略。

2.12 server_audit_query_log_limit

限制审计日志记录中字符串长度,默认为 1024。

2.13 server_audit_syslog_facility

SYSLOG-mode 变量,设置一些 “facility”。

2.14 server_audit_syslog_ident

设置 ident 作为审计日志的一部分。

2.15 server_audit_syslog_info

将指定字符串添加到审计日志中。

2.16 server_audit_syslog_priority

SYSLOG-mode 变量,为 syslog 定义日志记录的优先级。

3. 审计插件使用

开启审计日志,每个日志大小为 5G 可以有 10 文件进行轮换。

server_audit_logging = ON
server_audit_file_path = /pg_data/mysql_audit_log
server_audit_file_rotate_size = 5G
server_audit_file_rotations = 10
server_audit_file_rotate_now = ON

server_audit_file_path 参数的目录需要提前创建好,并配置 mysql 属组,然后重启 MySQL 服务。

审计日志的记录格式是:

[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]
20230830 15:55:51,db4,root,localhost,2,0,CONNECT,,,0
20230830 15:55:51,db4,root,localhost,2,1,QUERY,,'select @@version_comment limit 1',0
20230830 15:55:51,db4,root,localhost,2,2,QUERY,,'select USER()',0
20230830 15:55:56,db4,root,localhost,2,3,QUERY,,'show databases',0
20230830 15:56:16,db4,root,localhost,2,4,QUERY,,'SELECT DATABASE()',0
20230830 15:56:16,db4,root,localhost,2,6,QUERY,op_service_db,'show databases',0
20230830 15:56:16,db4,root,localhost,2,7,QUERY,op_service_db,'show tables',0
20230830 15:56:19,db4,root,localhost,2,19,QUERY,op_service_db,'show tables',0
20230830 15:59:25,db4,root,localhost,2,20,QUERY,op_service_db,'set global server_audit_syslog_ident = \'test01\'',0

4. 卸载审计插件

执行下方 SQL 卸载插件即可:

UNINSTALL PLUGIN 'server_audit';

5. 总结

以上就是审计日志的配置和使用说明,值得注意的是,开通审计会增加数据库性能开销,需要关注磁盘空间使用情况。


相关文章

linux下增加虚拟内存

用df -m查看系统分区状况,确定将虚拟内存放到那个盘里(找有足够空间的盘)[root@AY130716153752714ddeZ ~]# df -m Filesyst...

MySQL 在线开启 GTID

MySQL 在线开启 GTID

描述生产环境上也会遇到需要开启 GTID ,有什么风险?如何在线开启?本篇 SOP 将介绍。GTID 限制由于基于 GTID 复制依赖于事务,所有开启 GTID 时,有些 MySQL 特性不支持:事务...

SQLServer执行计划

SQLServer执行计划

一、执行计划概览RDS SQLServer 执行计划可以在性能分析中查看,也可以在登陆数据库后查看执行计划。(1)在 DMS 登陆数据库后查看,情况如下: 具体执行计划内容如下: (2)在性能分析中找...

Hive小文件合并

hive 小文件合并一、参数配置:在Map输入的时候, 把小文件合并.-- 每个Map最大输入大小,决定合并后的文件数 set mapred.max.split.size=256000000; -...

Hive架构图及Hive SQL的执行流程

Hive架构图及Hive SQL的执行流程

1、Hive产生背景MapReduce编程的不便性HDFS上的文件缺少Schema(表名,名称,ID等,为数据库对象的集合)2、Hive是什么Hive的使用场景是什么?基于Hadoop做一些数据清洗啊...

MySQL优化器特性(二)MRR优化

MySQL优化器特性(二)MRR优化

Index Range Scan索引范围扫描的一般步骤:1、根据where条件,从B+树定位到第一条记录。2、从索引页子节点中获取到行号(rowid),根据rowid回表查询数据。3、使用额外的whe...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。