本节介绍如何安装或卸载 MySQL Enterprise Audit,它使用审计日志插件和第 8.4.5.1 节,“MySQL Enterprise Audit 的元素”中描述的相关元素实现。有关安装插件的一般信息,请参见第 7.6.1 节,“安装和卸载插件”.
升级 MySQL 安装时不会自动升级插件,并且某些可加载插件函数必须手动加载(请参见安装可加载函数)。或者,您可以在升级 MySQL 后重新安装插件以加载新函数。
在按照本节说明操作之前,请先阅读本节的全部内容。该过程的部分步骤因您的环境而异。
如果已安装,即使在禁用时,audit_log
插件也会产生一些很小的开销。为了避免这种开销,除非您打算使用 MySQL Enterprise Audit,否则请不要安装它。
要使服务器可以使用,插件库文件必须位于 MySQL 插件目录(由plugin_dir
系统变量指定的目录)。如有必要,请在服务器启动时设置plugin_dir
的值来配置插件目录位置。
要安装 MySQL Enterprise Audit,请查看 MySQL 安装的share
目录,并选择适合您平台的脚本。可用的脚本在用于引用脚本的文件名方面有所不同
audit_log_filter_win_install.sql
audit_log_filter_linux_install.sql
按照以下步骤运行脚本。此处的示例使用 Linux 安装脚本和默认的mysql
系统数据库。请根据您的系统进行适当的替换。
$> mysql -u root -p -D mysql < audit_log_filter_linux_install.sql
Enter password: (enter root password here)
您可以在运行安装脚本时指定用于存储 JSON 过滤器表的自定义数据库。首先创建数据库;其名称不应超过 64 个字符。例如
mysql> CREATE DATABASE IF NOT EXISTS database-name;
接下来,使用备选数据库名称运行脚本。
$> mysql -u root -p -D database-name < audit_log_filter_linux_install.sql
Enter password: (enter root password here)
某些 MySQL 版本对 MySQL Enterprise Audit 表的结构进行了更改。为了确保您的表在从早期版本的 MySQL 升级时保持最新,请执行 MySQL 升级过程,确保使用强制更新的选项(请参见第 3 章,升级 MySQL)。如果您希望仅对 MySQL Enterprise Audit 表运行更新语句,请参见以下讨论。
对于新的 MySQL 安装,MySQL Enterprise Audit 使用的audit_log_user
表中的USER
和HOST
列的定义更符合mysql.user
系统表中User
和Host
列的定义。对于升级到已安装 MySQL Enterprise Audit 的安装,建议您按以下方式更改表定义
ALTER TABLE mysql.audit_log_user
DROP FOREIGN KEY audit_log_user_ibfk_1;
ALTER TABLE mysql.audit_log_filter
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
ALTER TABLE mysql.audit_log_user
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci;
ALTER TABLE mysql.audit_log_user
MODIFY COLUMN USER VARCHAR(32);
ALTER TABLE mysql.audit_log_user
ADD FOREIGN KEY (FILTERNAME) REFERENCES mysql.audit_log_filter(NAME);
要在源/副本复制、组复制或 InnoDB Cluster 的上下文中使用 MySQL Enterprise Audit,您必须在源节点上运行安装脚本之前准备副本节点。这是必需的,因为脚本中的INSTALL PLUGIN
语句不会被复制。
在每个副本节点上,从安装脚本中提取
INSTALL PLUGIN
语句,并手动执行它。在源节点上,按照前面介绍的步骤运行安装脚本。
要验证插件安装,请检查信息架构 PLUGINS
表或使用 SHOW PLUGINS
语句(参见 第 7.6.2 节,“获取服务器插件信息”)。例如
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'audit%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| audit_log | ACTIVE |
+-------------+---------------+
如果插件无法初始化,请检查服务器错误日志以获取诊断消息。
安装 MySQL Enterprise Audit 后,您可以使用 --audit-log
选项在后续服务器启动时控制 audit_log
插件的激活。例如,要防止插件在运行时被移除,请使用以下选项
[mysqld]
audit-log=FORCE_PLUS_PERMANENT
如果希望防止服务器在没有审计插件的情况下运行,请使用 --audit-log
,其值为 FORCE
或 FORCE_PLUS_PERMANENT
,强制服务器启动在插件未成功初始化时失败。
默认情况下,基于规则的审计日志过滤不会记录任何用户的任何可审计事件。这与传统审计日志的行为不同,传统审计日志会记录所有用户的可审计事件(参见 第 8.4.5.10 节,“传统模式审计日志过滤”)。如果您希望使用基于规则的过滤产生记录所有内容的行为,请创建一个简单的过滤器以启用日志记录并将其分配给默认帐户
SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
SELECT audit_log_filter_set_user('%', 'log_all');
分配给 %
的过滤器用于来自任何没有显式分配过滤器的帐户的连接(最初对所有帐户都是如此)。
按上述方式安装后,MySQL Enterprise Audit 将保持安装状态,直到卸载。要将其删除,请运行位于 MySQL 安装的 share
目录中的卸载脚本。此处示例指定了默认系统数据库 mysql
。请根据您的系统进行适当替换。
$> mysql -u root -p -D mysql < audit_log_filter_uninstall.sql
Enter password: (enter root password here)