Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.4 安全组件和插件  / 6.4.5 MySQL企业审计  /  6.4.5.2 安装或卸载 MySQL Enterprise Audit

6.4.5.2 安装或卸载 MySQL Enterprise Audit

本节介绍如何安装或卸载 MySQL Enterprise Audit,它是使用第 6.4.5.1 节“MySQL Enterprise Audit 的元素”中描述的审核日志插件和相关元素实现的。有关安装插件的一般信息,请参阅 第 5.5.1 节,“安装和卸载插件”

重要的

在按照其说明进行操作之前,请阅读整个部分。该过程的某些部分因您的环境而异。

笔记

如果已安装,该audit_log插件即使在禁用时也会涉及一些最小的开销。为避免这种开销,除非您打算使用它,否则不要安装 MySQL Enterprise Audit。

为了被服务器使用,插件库文件必须位于MySQL插件目录(由plugin_dir系统变量命名的目录)中。plugin_dir如有必要,通过在服务器启动时 设置值来配置插件目录位置 。

笔记

此处的说明适用于 MySQL 5.7.13 或更高版本。对于 5.7.13 之前的 MySQL 版本,请参阅 MySQL 5.6 参考手册中的 安装 MySQL Enterprise Audit

此外,在 MySQL 5.7.13 之前,MySQL Enterprise Audit 仅包含 audit_log插件,不包含 第 6.4.5.1 节“MySQL Enterprise Audit 的元素”中描述的任何其他元素。从 MySQL 5.7.13 开始,如果audit_log插件已经从 5.7.13 之前的 MySQL 版本安装,请使用以下语句卸载它并在安装当前版本之前重新启动服务器:

UNINSTALL PLUGIN audit_log;

要安装 MySQL Enterprise Audit,请查看share MySQL 安装目录并选择适合您平台的脚本。可用脚本的不同之处在于用于引用插件库文件的后缀:

  • audit_log_filter_win_install.sql:选择此脚本用于 Windows 系统 .dll用作文件名后缀。

  • audit_log_filter_linux_install.sql: 选择此脚本用于 Linux 和类似的系统 .so用作文件名后缀。

运行脚本如下。这里的示例使用 Linux 安装脚本。为您的系统进行适当的替换。

$> mysql -u root -p < audit_log_filter_linux_install.sql
Enter password: (enter root password here)
笔记

一些 MySQL 版本对 MySQL Enterprise Audit 表的结构进行了更改。为确保您的表是最新的,以便从早期版本的 MySQL 5.7 升级,请运行mysql_upgrade --force (它还会执行任何其他需要的更新)。如果您更喜欢仅为 MySQL Enterprise Audit 表运行更新语句,请参阅以下讨论。

从 MySQL 5.7.23 开始,对于新的 MySQL 安装, MySQL Enterprise Audit 使用的表中的USERHOST列的定义与系统表中的和 列audit_log_user的定义更好地对应。对于已安装 MySQL Enterprise Audit 的安装升级到 5.7.23 或更高版本,建议您按如下方式更改表定义: UserHostmysql.user

ALTER TABLE mysql.audit_log_user
  DROP FOREIGN KEY audit_log_user_ibfk_1;
ALTER TABLE mysql.audit_log_filter
  ENGINE=InnoDB;
ALTER TABLE mysql.audit_log_filter
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE mysql.audit_log_user
  ENGINE=InnoDB;
ALTER TABLE mysql.audit_log_user
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
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);

从 MySQL 5.7.21 开始,对于 MySQL Enterprise Audit 的新安装, InnoDB使用它来代替 MyISAM审计日志表。对于已安装 MySQL Enterprise Audit 的安装升级到 5.7.21 或更高版本,建议您更改审计日志表以使用InnoDB

ALTER TABLE mysql.audit_log_user ENGINE=InnoDB;
ALTER TABLE mysql.audit_log_filter ENGINE=InnoDB;
笔记

要在源/副本复制、组复制或 InnoDB 集群的上下文中使用 MySQL Enterprise Audit,您必须使用 MySQL 5.7.21 或更高版本,并确保审计日志表 InnoDB按刚才所述使用。然后您必须在源节点上运行安装脚本之前准备副本节点。这是必要的,因为 INSTALL PLUGIN脚本中的语句不会被复制。

  1. 在每个副本节点上, INSTALL PLUGIN从安装脚本中提取语句并手动执行。

  2. 在源节点上,如前所述运行安装脚本。

要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS表格或使用SHOW PLUGINS语句(请参阅第 5.5.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

如果希望防止服务器在没有审计插件的情况下运行,请使用or --audit-log 的值,如果插件未成功初始化,则强制服务器启动失败。 FORCEFORCE_PLUS_PERMANENT

重要的

默认情况下,基于规则的审计日志过滤不会记录任何用户的可审计事件。这不同于遗留审计日志行为(在 MySQL 5.7.13 之前),后者记录所有用户的所有可审计事件(请参阅 第 6.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 将保持安装状态,直到卸载为止。要删除它,请执行以下语句:

DROP TABLE IF EXISTS mysql.audit_log_user;
DROP TABLE IF EXISTS mysql.audit_log_filter;
UNINSTALL PLUGIN audit_log;
DROP FUNCTION audit_log_filter_set_filter;
DROP FUNCTION audit_log_filter_remove_filter;
DROP FUNCTION audit_log_filter_set_user;
DROP FUNCTION audit_log_filter_remove_user;
DROP FUNCTION audit_log_filter_flush;
DROP FUNCTION audit_log_encryption_password_get;
DROP FUNCTION audit_log_encryption_password_set;
DROP FUNCTION audit_log_read;
DROP FUNCTION audit_log_read_bookmark;