本节介绍如何安装或卸载 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 使用的表中的USER
和HOST
列的定义与系统表中的和
列audit_log_user
的定义更好地对应。对于已安装 MySQL Enterprise Audit 的安装升级到 5.7.23 或更高版本,建议您按如下方式更改表定义:
User
Host
mysql.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
脚本中的语句不会被复制。
在每个副本节点上,
INSTALL PLUGIN
从安装脚本中提取语句并手动执行。在源节点上,如前所述运行安装脚本。
要验证插件安装,请检查
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
的值,如果插件未成功初始化,则强制服务器启动失败。
FORCE
FORCE_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;