• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 传统模式审核日志过滤

    注意

    本节描述了旧式审核日志筛选,如果 udit_log安装了插件,则适用于旧审核日志筛选,但不适用于基于规则的筛选所需的随附审核表和UDF。

    审核日志插件可以过滤审核的事件。这使您可以根据事件起源的帐户或事件状态来控制是否将已审计的事件写入审计日志文件。对于连接事件和语句事件,状态筛选分别发生。

    • 按帐户进行事件过滤
    • 按状态过滤事件
    按帐户进行事件过滤

    要基于原始帐户过滤审核的事件,请在服务器启动或运行时设置以下系统变量之一:

    • udit_log_include_accounts:要包括在审核日志记录中的帐户。如果设置了此变量,则仅审核这些帐户。
    • udit_log_exclude_accounts:要从审计日志中排除的帐户。如果设置了此变量,将审核除这些帐户以外的所有帐户。

    变量的值可以是NULL或包含一个或多个以逗号分隔的帐户名的字符串,每个帐户名均采用格式。默认情况下,两个变量均为,在这种情况下,不进行帐户过滤,并且对所有帐户进行审核。user_name@host_nameNULL

    修改 udit_log_include_accounts udit_log_exclude_accounts仅影响修改后创建的连接,不影响现有连接。

    示例:要仅对user1user2本地主机帐户帐户启用审核日志记录,请按以下方式设置 udit_log_include_accounts系统变量:

    SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';
    

    一次只能 udit_log_include_accounts udit_log_exclude_accounts不能之一NULL

    • 如果设置 udit_log_include_accounts,则服务器设置 udit_log_exclude_accountsNULL
    • 如果你试图设置 udit_log_exclude_accounts,除非发生错误 udit_log_include_accountsNULL。在这种情况下,必须首先 udit_log_include_accounts将其设置为进行清除NULL
    -- This sets audit_log_exclude_accounts to NULL
    SET GLOBAL audit_log_include_accounts = value;
    
    -- This fails because audit_log_include_accounts is not NULL
    SET GLOBAL audit_log_exclude_accounts = value;
    
    -- To set audit_log_exclude_accounts, first set
    -- audit_log_include_accounts to NULL
    SET GLOBAL audit_log_include_accounts = NULL;
    SET GLOBAL audit_log_exclude_accounts = value;
    

    如果检查两个变量的值,请注意将SHOW VARIABLES显示NULL为空字符串。为避免这种情况,请SELECT改用:

    mysql> SHOW VARIABLES LIKE 'audit_log_include_accounts';
    +----------------------------	+-------	+
    | Variable_name               | Value  |
    +----------------------------	+-------	+
    | audit_log_include_accounts  |        |
    +----------------------------	+-------	+
    mysql> SELECT @@audit_log_include_accounts;
    +------------------------------	+
    | @@audit_log_include_accounts  |
    +------------------------------	+
    | NULL                          |
    +------------------------------	+
    

    如果用户名或主机名由于包含逗号,空格或其他特殊字符而需要加引号,请使用单引号将其引起来。如果变量值本身用单引号引起来,则将每个内部单引号加倍或用反斜杠对其进行转义。以下语句每个都启用本地root帐户的审核日志记录,并且即使引用风格不同,它们也等效:

    SET GLOBAL audit_log_include_accounts = 'root@localhost';
    SET GLOBAL audit_log_include_accounts = '''root''@''localhost''';
    SET GLOBAL audit_log_include_accounts = '\'root\'@\'localhost\'';
    SET GLOBAL audit_log_include_accounts = "'root'@'localhost'";
    

    如果ANSI_QUOTES启用了SQL模式,则最后一条语句将不起作用,因为在该模式下,双引号表示标识符引号,而不是字符串引号。

    按状态过滤事件

    要基于状态过滤审核的事件,请在服务器启动或运行时设置以下系统变量。这些变量仅适用于旧版审核日志过滤。对于JSON审核日志过滤,将应用不同的状态变量。请参阅审核日志选项和变量。

    • udit_log_connection_policy:连接事件的日志记录策略
    • udit_log_statement_policy:语句事件的记录策略

    每个变量的值分别为ALL(记录所有关联的事件;这是默认值),ERRORS(仅记录失败的事件)或NONE(不记录事件)。例如,要记录所有语句事件但仅记录失败的连接事件,请使用以下设置:

    SET GLOBAL audit_log_statement_policy = ALL;
    SET GLOBAL audit_log_connection_policy = ERRORS;
    

    可以使用另一个策略系统变量, udit_log_policy但不能提供与 udit_log_connection_policy和一样多的控制 udit_log_statement_policy。只能在服务器启动时设置。在运行时,它是一个只读变量。它的值为ALL(记录所有事件;这是默认值),LOGINS(记录连接事件),QUERIES(记录语句事件)或NONE(不记录事件)。对于这些值中的任何一个,审核日志插件都会记录所有选定的事件,而不会区分成功还是失败。 udit_log_policy在启动时的使用方式如下:

    • 如果未将 udit_log_policyALL设置为默认值或未将其设置为默认值,则任何显式设置 udit_log_connection_policy udit_log_statement_policy按指定应用。如果未指定,则默认为ALL
    • 如果设置 udit_log_policy为非ALL值,则该值优先于并用于设置 udit_log_connection_policy udit_log_statement_policy,如下表所示。如果您还将这些变量中的任何一个都设置为默认值以外的其他值ALL,则服务器会向错误日志中写入一条消息,指示它们的值已被覆盖。

      启动audit_log_policy值产生的audit_log_connection_policy值结果audit_log_statement_policy值
      LOGINSALLNONE
      QUERIESNONEALL
      NONENONENONE