本节介绍如何安装或卸载 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 集群的上下文中使用 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
如果希望防止服务器在没有审计插件的情况下运行,请使用值为 FORCE
或 FORCE_PLUS_PERMANENT
的 --audit-log
,以便在插件未成功初始化时强制服务器启动失败。
默认情况下,基于规则的审计日志过滤不会记录任何用户的任何可审计事件。这与旧版审计日志行为不同,后者会记录所有用户的可审计事件(请参阅 第 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)