Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The Audit Message Component

8.4.6 审核消息组件

audit_api_message_emit 组件使应用程序能够将自己的消息事件添加到审核日志中,使用 audit_api_message_emit_udf() 函数。

audit_api_message_emit 组件与所有审核类型的插件合作。例如,使用 audit_log 插件,如 第 8.4.5 节,“MySQL 企业审核” 所述。

安装或卸载审核消息组件

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

要安装 audit_api_message_emit 组件,请使用以下语句:

Press CTRL+C to copy
INSTALL COMPONENT "file://component_audit_api_message_emit";

组件安装是一次性操作,不需要在每次服务器启动时执行。INSTALL COMPONENT 加载组件,并在 mysql.component 系统表中注册它,以便在后续服务器启动时加载。

要卸载 audit_api_message_emit 组件,请使用以下语句:

Press CTRL+C to copy
UNINSTALL COMPONENT "file://component_audit_api_message_emit";

UNINSTALL COMPONENT 卸载组件,并从 mysql.component 系统表中取消注册,以便在后续服务器启动时不加载。

因为安装和卸载 audit_api_message_emit 组件安装和卸载了该组件实现的 audit_api_message_emit_udf() 函数,因此不需要使用 CREATE FUNCTIONDROP FUNCTION

审核消息函数

本节描述了audit_api_message_emit_udf()函数,该函数由audit_api_message_emit组件实现。

在使用审核消息函数之前,请按照安装或卸载审核消息组件中的说明安装审核消息组件。

  • audit_api_message_emit_udf(组件, 生产者, 消息[, , ] ...)

    将消息事件添加到审核日志中。消息事件包括组件、生产者和消息字符串,可以选择性地包括一组键值对。

    由该函数发布的事件将被发送到所有启用的审核类型插件,每个插件根据自己的规则处理事件。如果没有启用审核类型插件,则发布事件无效。

    参数:

    • 组件:指定组件名称的字符串。

    • 生产者:指定生产者名称的字符串。

    • 消息:指定事件消息的字符串。

    • , :事件可以包括 0 个或多个键值对,指定应用程序提供的数据映射。每个 参数都是一个字符串,指定其紧跟的 参数的名称。每个 参数指定其紧跟的 参数的值。每个 可以是字符串或数字值,或者 NULL

    返回值:

    字符串 OK,表示成功。如果函数失败,将发生错误。

    示例:

    Press CTRL+C to copy
    mysql> SELECT audit_api_message_emit_udf('component_text', 'producer_text', 'message_text', 'key1', 'value1', 'key2', 123, 'key3', NULL) AS 'Message'; +---------+ | Message | +---------+ | OK | +---------+

    附加信息:

    每个审核插件在收到 audit_api_message_emit_udf() 发布的事件时,都将以插件特定的格式记录事件。例如,audit_log 插件(见 第 8.4.5 节,“MySQL Enterprise Audit”)以以下方式记录消息值,具体取决于 audit_log_format 系统变量的配置:

    • JSON 格式 (audit_log_format=JSON):

      Press CTRL+C to copy
      { ... "class": "message", "event": "user", ... "message_data": { "component": "component_text", "producer": "producer_text", "message": "message_text", "map": { "key1": "value1", "key2": 123, "key3": null } } }
    • 新式 XML 格式 (audit_log_format=NEW):

      Press CTRL+C to copy
      <AUDIT_RECORD> ... <NAME>Message</NAME> ... <COMMAND_CLASS>user</COMMAND_CLASS> <COMPONENT>component_text</COMPONENT> <PRODUCER>producer_text</PRODUCER> <MESSAGE>message_text</MESSAGE> <MAP> <ELEMENT> <KEY>key1</KEY> <VALUE>value1</VALUE> </ELEMENT> <ELEMENT> <KEY>key2</KEY> <VALUE>123</VALUE> </ELEMENT> <ELEMENT> <KEY>key3</KEY> <VALUE/> </ELEMENT> </MAP> </AUDIT_RECORD>
    • 旧式 XML 格式 (audit_log_format=OLD):

      Press CTRL+C to copy
      <AUDIT_RECORD ... NAME="Message" ... COMMAND_CLASS="user" COMPONENT="component_text" PRODUCER="producer_text" MESSAGE="message_text"/>
      Note

      以旧式 XML 格式记录的消息事件不包括键值映射,因为该格式存在表示约束。

    audit_api_message_emit_udf() 发送的消息具有事件类 MYSQL_AUDIT_MESSAGE_CLASS 和子类 MYSQL_AUDIT_MESSAGE_USER。(内部生成的审核消息具有相同的类和子类 MYSQL_AUDIT_MESSAGE_INTERNAL;当前该子类未使用。)要在 audit_log 筛选规则中引用这些事件,请使用 class 元素,名称值为 message。例如:

    Press CTRL+C to copy
    { "filter": { "class": { "name": "message" } } }

    如果需要区分用户生成和内部生成的消息事件,请测试 subclass 值是否为 userinternal

    基于键值映射内容的筛选不受支持。

    有关编写筛选规则的信息,请参阅 第 8.4.5.7 节,“审核日志筛选”