MySQL Enterprise Audit 支持对连接和查询活动进行标准的、基于策略的监控和记录,为受内部和外部监管准则约束的应用程序提供审核和合规性解决方案。
安装后,审计插件使 MySQL 服务器能够生成包含服务器活动审计记录的日志文件。日志内容包括客户端何时连接和断开连接,以及它们在连接时执行的操作,例如它们访问了哪些数据库和表。
安装插件后,它会写入一个审核日志文件。默认情况下,该文件已命名audit.log
并位于数据目录中。
安装 MySQL Enterprise Audit:
-
运行
audit_log_filter_linux_install.sql
位于share
MySQL 安装目录中的脚本。$> cd /usr/local/mysql $> bin/mysql -u root -p < /usr/local/mysql/share/audit_log_filter_linux_install.sql Enter password: (enter root password here) Result OK
-
通过以 root 身份登录并检查
INFORMATION_SCHEMA.PLUGINS
表或使用SHOW PLUGINS
语句来验证插件安装。$> cd /usr/local/mysql $> bin/mysqladmin -u root -p version Enter password: (enter root password here)
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'audit%'; +-------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------+---------------+ | audit_log | ACTIVE | +-------------+---------------+
-
为了防止插件在运行时被删除, 在 MySQL 配置文件 ( )
--audit-log
的选项组下添加选项, 设置为.[mysqld]
/etc/my.cnf
FORCE_PLUS_PERMANENT
audit-log=FORCE_PLUS_PERMANENT
-
重新启动服务器以应用配置更改:
$> systemctl restart mysqld
-
默认情况下,基于规则的审计日志过滤不会记录任何用户的可审计事件。要使用基于规则的过滤生成记录所有行为,请创建一个简单的过滤器以启用日志记录并将其分配给默认帐户:
mysql> SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }'); +-------------------------------------------------------------------------+ | audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }') | +-------------------------------------------------------------------------+ | OK | +-------------------------------------------------------------------------+ mysql> SELECT audit_log_filter_set_user('%', 'log_all'); +-------------------------------------------------------------------------+ | audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }') | +-------------------------------------------------------------------------+ | OK | +-------------------------------------------------------------------------+
分配给的过滤器
%
用于来自没有明确分配过滤器的任何帐户的连接(最初对所有帐户都是如此)。 -
要验证是否正在记录事件,请发出一条语句,例如
SHOW DATABASES
并检查audit.log
日志事件的文件内容。$> cd /usr/local/mysql $> bin/mysqladmin -u root -p version Enter password: (enter root password here)
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
SHOW DATABASES
语句运行方式root@localhost
写入audit.log
类似于以下内容 的日志事件:<AUDIT_RECORD> <TIMESTAMP>2018-04-20T11:28:02 UTC</TIMESTAMP> <RECORD_ID>7_2018-04-20T11:27:29</RECORD_ID> <NAME>Query</NAME> <CONNECTION_ID>9</CONNECTION_ID> <STATUS>0</STATUS> <STATUS_CODE>0</STATUS_CODE> <USER>root[root] @ localhost []</USER> <OS_LOGIN/> <HOST>localhost</HOST> <IP/> <COMMAND_CLASS>show_databases</COMMAND_CLASS> <SQLTEXT>SHOW DATABASES</SQLTEXT> </AUDIT_RECORD>
审计日志文件的内容可能包含敏感信息,例如 SQL 语句的文本。出于安全原因,该文件应写入一个目录,该目录只能由 MySQL 服务器和有正当理由查看日志的用户访问。默认审计日志文件已命名
audit.log
并位于数据目录中。在此部署中,数据目录归mysql
用户所有。可以在服务器启动时使用
audit_log_file
系统变量更改审计日志文件的位置。
可选地,审计日志文件也可以被加密。加密基于用户定义的密码。要使用此功能,必须启用 MySQL 密钥环。审计日志记录使用 MySQL 密钥环存储密码。有关更多信息,请参阅 加密审计日志文件。
有关配置 MySQL Enterprise Audit 的更多信息,请参阅 MySQL Enterprise Audit。