前言
数据库审计功能主要将用户对数据库的各类操作行为记录审计日志,以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分。
MySQL 5.5企业版增加审计功能,但是需要付费。MySQL社区版没有审计功能,除了商业版的审计插件外,常见的还有三类审计插件Percona Audit Log Plugin、MariaDB Audit Plugin、McAfee MySQL Audit Plugin。这几个插件功能上大同小异,只是展示的内容和格式略有不同。InnoSQL 5.7版本基于Percona 5.7.26-29 审计插件Audit Log Plugin 实现了审计功能,并对性能进行了优化,修改了原生版本的一些日志记录的问题,同时也增加了审计日志的字段丰富记录内容。
下面对InnoSQL审计插件的功能及使用方法进行介绍。
开启审计
安装插件
配置文件加载插件
我们可以在配置文件中加载插件开启审计。
[mysqld]
plugin-load=audit_log.so
如果在配置文件中加载了audit_log.so可以直接配置审计相关的参数
audit_log_timestamps=SYSTEM
否则,可以通过loose的方式配置插件参数,INSTALL插件后生效。这也是MySQL插件参数的通用配置方法。
loose-audit_log_timestamps=SYSTEM
命令行加载插件
审计功能的开启还有另外一种方式,就是在命令行中安装审计插件。
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
启停审计功能
支持在线进行审计功能的启停操作。
启用审计:
mysql> set global audit_log_policy= ALL/ LOGINS/ QUERIES;
停用审计:
mysql> set global audit_log_policy=NONE;
卸载插件
卸载插件命令
mysql> UNINSTALL PLUGIN audit_log;
如果此时仍有业务记录审计日志,那么将无法在线卸载,需重启生效。
如果不需要审计了,可以使用set global audit_log_policy=NONE 在线停用审计功能,停用之后跟未安装插件的性能一致。
参数介绍
audit_log_buffer_size
variable
audit_log_buffer_size
Command Line
YES
Scope
Global
Dynamic
No
Variable Type
Numeric
Default Value
1MB
审计日志缓冲区大小,当audit_log_strategy生效(audit_log_handler 为 'FILE')
且设置为ASYNCHRONOUS、PERFORMANCE时生效。audit_log_buffer_size 的大小设置需要是4096的正整数倍。
audit_log_include_accounts / audit_log_exclude_accounts
variable
audit_log_include_accounts
audit_log_exclude_accounts
Command Line
YES
Scope
Global
Dynamic
YES
Variable Type
String
Default Value
NULL
指定记录包含/不包含的用户的审计日志,取值逗号分隔,如果设置include或者exclude,则另一个变量不能设置任何值,只能将设置值的变量置NULL后才能设置另一个变量的值,反之亦然。
注意:设置过滤后,在已经存在的服务器连接中不生效,需要重新连接才生效。
举例:
mysql> SET GLOBAL audit_log_include_accounts = 'user1@localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL audit_log_exclude_accounts = 'root@localhost';
Query OK, 0 rows affected (0.00 sec)
audit_log_include_commands / audit_log_exclude_commands
variable
audit_log_include_commands
audit_log_exclude_commands
Command Line
YES
Scope
Global
Dynamic
YES
Variable Type
String
Default Value
NULL
指定记录包含/不包含的命令类型的审计日志,取值逗号分隔,如果设置include或者exclude,则另一个变量不能设置任何值,只能将设置值的变量置NULL后才能设置另一个变量的值,反之亦然。
Commands可以设置的类型:
mysql> SELECT name FROM performance_schema.setup_instruments WHERE name LIKE "statement/sql/%" ORDER BY name;
+---------------------------------------+
| name |
+---------------------------------------+
| statement/sql/alter_db |
| statement/sql/alter_db_upgrade |
| statement/sql/alter_event |
| statement/sql/alter_function |
| statement/sql/alter_instance |
| statement/sql/alter_procedure |
| statement/sql/alter_server |
| statement/sql/alter_table |
| statement/sql/alter_tablespace |
| statement/sql/alter_user |
| statement/sql/analyze |
| statement/sql/assign_to_keycache |
| statement/sql/begin |
| statement/sql/binlog |
| statement/sql/call_procedure |
| statement/sql/change_db |
……
| statement