MySQL审计插件:MariaDB Audit Plugin

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

MariaDB Auditing Plugin 的安装

MariaDB 审计插件的名称是 server_audit.so(Windows系统下是 server_audit.dll ),要注意的是,审计插件一直在更新,不同版本的审计插件功能也不同,推荐使用 >= 1.4.4 版本的插件。

由于 MariaDB Auditing Plugin 集成在 MariaDB 里面,没有单独提供,所以我们需要先下载一个MariaDB。

下面我们以 CentOS 系统 MySQL 5.7 版本为例来安装下审计插件:

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

# MariaDB 10.1
wget https://archive.mariadb.org//mariadb-10.1.48/bintar-linux-systemd-x86_64/mariadb-10.1.48-linux-systemd-x86_64.tar.gz
tar -zxvf mariadb-10.1.48-linux-systemd-x86_64.tar.gz
# MariaDB 10.2 -> MySQL 5.7.44
wget https://archive.mariadb.org//mariadb-10.2.44/bintar-linux-systemd-x86_64/mariadb-10.2.44-linux-systemd-x86_64.tar.gz
tar -zxvf mariadb-10.2.44-linux-systemd-x86_64.tar.gz
# MariaDB 10.4 -> MySQL 5.7.44
wget https://archive.mariadb.org//mariadb-10.4.34/bintar-linux-systemd-x86_64/mariadb-10.4.34-linux-systemd-x86_64.tar.gz
tar -zxvf mariadb-10.4.34-linux-systemd-x86_64.tar.gz

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

# 查找插件库
$ ll ~/mariadb-10.2.44-linux-systemd-x86_64/lib/plugin/server_audit.so
-rwxr-xr-x 1 www www 266312 518 2022 /root/mariadb-10.2.44-linux-systemd-x86_64/lib/plugin/server_audit.so
# 授权
$ chmod -R 755 ~/mariadb-10.2.44-linux-systemd-x86_64/lib/plugin/server_audit.so
# 使用 ldd 查看程序依赖的库
$ ldd ~/mariadb-10.2.44-linux-systemd-x86_64/lib/plugin/server_audit.so
        linux-vdso.so.1 =>  (0x00007ffe0cdca000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f68133c3000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6812ff5000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f68137f0000)

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

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

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

# 通常安装的MySQL在 /usr/local/mysql 目录下
$ cp ~/mariadb-10.2.44-linux-systemd-x86_64/lib/plugin/server_audit.so /usr/local/mysql/lib/plugin/
# 宝塔Linux面板安装的MySQL在 /www/server/mysql 目录下
$ cp ~/mariadb-10.2.44-linux-systemd-x86_64/lib/plugin/server_audit.so /www/server/mysql/lib/plugin/

使用 root 账号登录

mysql -uroot -p<密码>

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

install plugin server_audit SONAME 'server_audit.so';
  1. 配置audit插件

配置audit插件是为了确保它可以正常工作并记录所需的事件。你可以按照以下步骤进行配置:

创建audit插件的配置文件(audit_log_filter.ini)。

#touch /path/to/audit_log_filter.ini
touch /www/server/mysql/audit_log_filter.ini

编辑配置文件,并添加所需的过滤规则。

#vi /path/to/audit_log_filter.ini
vi /www/server/mysql/audit_log_filter.ini

在文件中添加以下内容:

[filter]
log = CONNECT,QUERY,QUERY_DDL

这将配置audit插件只记录连接、查询和DDL(数据定义语言)事件。

在MySQL的配置文件(my.cnf)中启用audit插件。

vi /etc/my.cnf

在文件中添加以下内容:

plugin_load_add = audit_log.so

#audit_log_filter = /path/to/audit_log_filter.ini
audit_log_filter = /www/server/mysql/audit_log_filter.ini

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

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

审计插件参数

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

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 定义日志记录的优先级。

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

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

审计日志的记录格式是:

  1. 卸载审计插件
    执行下方 SQL 卸载插件即可:
UNINSTALL PLUGIN 'server_audit';
  1. 总结

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

作者:Jeebiz  创建时间:2024-08-20 15:33
最后编辑:Jeebiz  更新时间:2024-08-22 10:23