输出示例

上述示例代码的示例输出:

mysql> CALL flush_audit_log();
Query OK, 0 rows affected (0.01 sec)

要求

MySQL Enterprise Audit Log Plugin 的安装必须满足以下要求:

  • MySQL Enterprise Audit Log Plugin 包含在 MySQL Enterprise Edition:5.5.28 及更高版本和 5.6 及更高版本:GA 版本中
  • 必须安装并启用 MySQL Enterprise Audit Log Plugin。
  • MySQL Enterprise Audit Log Plugin 必须配置为 audit_log_rotate_on_size = 0
MySQL:用于轮换审计日志的存储过程

这是关于允许没有 SUPER 的用户轮换审计日志的简短说明。
由于 audit_log_flush 变量仅存在于 GLOBAL 范围内,因此需要 SUPER 权限才能设置它。

如果我们不想授予该用户 SUPER 权限(应谨慎授予此权限),则可以选择创建一个简单的过程来刷新审计日志并使用 SQL SECURITY DEFINER 执行该过程。
通过这种方式,我们可以使用具有 SUPER 的用户创建过程,然后将过程的 EXECUTE 授予应该被允许执行它的用户。

配置

需要以下权限:

  • 存储过程的创建者必须在创建例程的数据库上具有 SUPER 和 CREATE ROUTINE。
  • 存储过程的执行者必须对存储过程具有 EXECUTE。
  1. 重命名审计日志文件,例如:
$ mv audit.log audit.log.1
  1. 执行程序:
mysql> CALL flush_audit_log();
on  It Road.com

示例代码

示例代码:

DROP PROCEDURE IF EXISTS mysql.flush_audit_log;
DELIMITER //
CREATE PROCEDURE mysql.flush_audit_log()
   SQL SECURITY DEFINER
BEGIN
   IF (@@global.audit_log_rotate_on_size = 0) THEN
       SET GLOBAL audit_log_flush = 1;
   ELSE
       SIGNAL SQLSTATE '01000'
          SET MYSQL_ERRNO  = 1642,
              MESSAGE_TEXT = 'Setting audit_log_flush = 1 only has an effect when audit_log_rotate_on_size = 0';
   END IF;
END//
DELIMITER ;
日期:2020-09-17 00:11:15 来源:oir作者:oir