安装或卸载MySQL审核日志组件
注意
MySQL Enterprise Audit是商业产品MySQL Enterprise Edition中包含的扩展。要了解有关商业产品的更多信息,请参见 https://www.mysql.com/products/。
MySQL Enterprise Edition包括MySQL Enterprise Audit,它使用名为的服务器插件实现 udit_log
。MySQL Enterprise Audit使用开放的MySQL Audit API来启用对特定MySQL服务器上执行的标准,基于策略的监视,日志记录以及对连接和查询活动的阻止。MySQL Enterprise Audit专为满足Oracle审核规范而设计,它为受内部和外部法规准则约束的应用程序提供了开箱即用,易于使用的审核和合规性解决方案。
安装后,审核插件使MySQL Server能够生成包含服务器活动审核记录的日志文件。日志内容包括客户端连接和断开连接的时间,以及客户端连接时执行的操作,例如它们访问的数据库和表。
安装审核插件(请参见“MySQL企业防火墙”)之后,它将写入审核日志文件。默认情况下,该文件 udit.log
在服务器数据目录中命名。要更改文件名,请 udit_log_file
在服务器启动时设置系统变量。
默认情况下,审核日志文件的内容以新型XML格式编写,而不进行压缩或加密。要选择文件格式,请 udit_log_format
在服务器启动时设置系统变量。有关文件格式和内容的详细信息,请参见“MySQL审核日志文件格式”。
有关控制日志记录方式(包括审核日志文件的命名和格式选择)的更多信息,请参见“MySQL审核日志记录配置”。要执行审计事件的过滤,请参见“MySQL审核日志过滤”。有关用于配置审核日志插件的参数的说明,请参见审核日志选项和变量。
如果启用了审核日志插件,则性能模式(请参见MySQL性能模式)为其提供了工具。要确定相关工具,请使用以下查询:
SELECT NAME FROM performance_schem .setup_instrumentsWHERE NAME LIKE '%/alog/%';
审核日志组件
MySQL企业审核基于审核日志插件和相关组件:
- 一个名为的服务器端插件
udit_log
会检查可审核事件,并确定是否将其写入审核日志。 - 用户定义的功能可操纵过滤定义,以控制日志记录行为,加密密码和日志文件读取。
mysql
系统数据库中的表提供了过滤器和用户帐户数据的持久存储。- 系统变量可启用审核日志配置,状态变量可提供运行时操作信息。
- 一个
AUDIT_ADMIN
特权使用户能够管理审计日志。
安装或卸载MySQL Enterprise Audit
本节介绍如何安装或卸载MySQL Enterprise Audit,它是使用“审核日志组件”中所述的审核日志插件和相关组件实现的。有关安装插件的一般信息,请参见“MySQL服务器插件”。
重要在遵循其说明之前,请先阅读整个部分。该过程的某些部分取决于您的环境。
注意如果安装了该 udit_log
插件,即使禁用该插件也将花费一些最小的开销。为了避免这种开销,除非计划使用它,否则不要安装MySQL Enterprise Audit。
要由服务器使用,插件库文件必须位于MySQL插件目录(由plugin_dir
系统变量命名的目录)中。如有必要,通过设置plugin_dir
服务器启动时的值来配置插件目录位置。
要安装MySQL Enterprise Audit,请参见share
MySQL安装目录,然后选择适合您平台的脚本。可用脚本在用于引用插件库文件的后缀中有所不同:
udit_log_filter_win_install.sql
注意:对于.dll
用作文件名后缀的Windows系统,请选择此脚本。udit_log_filter_linux_install.sql
注意:对于Linux和类似.so
用作文件名后缀的系统,请选择此脚本。
如下运行脚本。此处的示例使用Linux安装脚本。为您的系统进行适当的替换。
shell>mysql -u root -p < audit_log_filter_linux_install.sql Enter password: (enter root password here)
注意
注意某些MySQL版本对MySQL企业审核表的结构进行了更改。为了确保您的表是最新的,可以从早期版本的MySQL 8.0进行升级,请执行MySQL升级过程,并确保使用强制执行更新的选项(请参见“升级MySQL”)。如果您只希望对MySQL Enterprise Audit表运行更新语句,请参见以下讨论。
从MySQL 8.0.12开始,对于新安装的MySQL,MySQL Enterprise Audit使用的表中的USER
和http://127.0.0.1/lanmper/public
列的 udit_log_user
定义更好地与系统表中的User
和Host
列的定义相对应mysql.user
。对于已经安装了MySQL Enterprise Audit的安装的升级,建议您按以下方式更改表定义:
ALTER TABLE mysql. udit_log_userDROP FOREIGN KEY audit_log_user_ibfk_1;ALTER TABLE mysql. udit_log_filter CONVERTTO CHARACTER SET utf8mb4COLLATE utf8mb4_0900_as_ci;ALTER TABLE mysql. udit_log_user CONVERTTO CHARACTER SET utf8mb4COLLATE utf8mb4_0900_as_ci;ALTER TABLE mysql. udit_log_userMODIFY COLUMN USER VARCHAR(32);ALTER TABLE mysql. udit_log_userADD FOREIGN KEY (FILTERNAME)REFERENCES mysql. udit_log_filter(NAME );
注意
注意要在主/从复制,组复制或InnoDB集群的上下文中使用MySQL Enterprise Audit,必须在主节点或主节点上运行安装脚本之前准备好从节点或辅助节点。这是必需的,因为
INSTALL PLUGIN
不会复制脚本中的语句。
- 在每个从节点或辅助节点上,
INSTALL PLUGIN
从安装脚本中提取该语句并手动执行它。 - 在主节点或主节点上,如前所述运行安装脚本。
要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINS
表或使用以下SHOW PLUGINS
语句(请参见“获取服务器插件信息”)。例如:
mysql>SELECT PLUGIN_NAME, PLUGIN_STATUSFROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'audit%'; +------------- +--------------- + | PLUGIN_NAME | PLUGIN_STATUS | +------------- +--------------- + | audit_log | ACTIVE | +------------- +--------------- +
如果插件未能初始化,请检查服务器错误日志以获取诊断消息。
安装MySQL企业审核后,您可以使用该--audit-log
选项进行后续服务器启动来控制 udit_log
插件的激活。例如,要防止在运行时删除插件,请使用以下选项:
[mysqld] udit-log=FORCE_PLUS_PERMANENT
如果希望阻止服务器在没有审核插件的情况下运行,请使用--audit-log
值为FORCE
或FORCE_PLUS_PERMANENT
强制如果插件未成功初始化则服务器启动失败。
默认情况下,基于规则的审核日志筛选不会记录任何用户的可审核事件。这与旧版审核日志行为不同,旧版审核日志行为记录了所有用户的所有可审核事件(请参见“传统模式审核日志过滤”)。如果您希望通过基于规则的过滤来产生所有日志行为,请创建一个简单的过滤器以启用日志记录并将其分配给默认帐户:
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. udit_log_user;DROP TABLE IF EXISTS mysql. udit_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;