• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • MySQL审核日志文件格式

    默认情况下,审核日志插件生成的审核日志文件的内容未加密,并且可能包含敏感信息,例如SQL语句的文本。出于安全原因,应将审核日志文件写入只有MySQL服务器和出于正当理由参见日志的用户才能访问的目录。默认文件名 udit.log在数据目录中。可以通过 udit_log_file在服务器启动时设置系统变量来更改此设置。由于日志轮换,可能还存在其他审核日志文件。

    为了提高安全性,请启用审核日志文件加密。请参阅审核日志文件加密。

    每当发生可审核事件时,MySQL服务器就会调用审核日志插件将审核记录写入其日志文件。通常,插件启动后写入的第一条审核记录包含服务器描述和启动选项。紧随其后的元素表示事件,例如客户端连接和断开事件,已执行的SQL语句等。仅记录顶级语句,而不记录诸如触发器或存储过程之类的存储程序中的语句。诸如此类的语句引用的文件的内容LOAD DATA未记录。

    要选择审核日志插件用来写入其日志文件的日志格式,请 udit_log_format在服务器启动时设置系统变量。这些格式可用:

    • 新型XML格式( udit_log_format=NEW):一种XML格式,与老式XML格式相比,与Oracle Audit Vault的兼容性更好。MySQL 8.0默认使用新型XML格式。
    • 旧式XML格式( udit_log_format=OLD):旧版MySQL系列默认使用的原始审核日志格式。
    • JSON格式( udit_log_format=JSON

    默认情况下,审核日志文件的内容以新型XML格式编写,而不进行压缩或加密。

    注意

    有关更改日志格式时要考虑的问题的信息,请参阅审核日志文件格式。

    以下各节描述了可用的审核日志记录格式:

    • 新型XML审核日志文件格式
    • 旧式XML审核日志文件格式
    • JSON审核日志文件格式
    新型XML审核日志文件格式

    这是新的XML格式( udit_log_format=NEW)的示例日志文件,为便于阅读,将其重新格式化为:

    <?xml version="1.0" encoding="utf-8"?>
    <AUDIT>
    <AUDIT_RECORD>
    <TIMESTAMP>2019-10-03T14:06:33 UTC</TIMESTAMP>
    <RECORD_ID>1_2019-10-03T14:06:33</RECORD_ID>
    <NAME>Audit</NAME>
    <SERVER_ID>1</SERVER_ID>
    <VERSION>1</VERSION>
    <STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld
    --socket=/usr/local/mysql/mysql.sock
    --port=3306</STARTUP_OPTIONS>
    <OS_VERSION>i686-Linux</OS_VERSION>
    <MYSQL_VERSION>5.7.21-log</MYSQL_VERSION>
    </AUDIT_RECORD>
    <AUDIT_RECORD>
    <TIMESTAMP>2019-10-03T14:09:38 UTC</TIMESTAMP>
    <RECORD_ID>2_2019-10-03T14:06:33</RECORD_ID>
    <NAME>Connect</NAME>
    <CONNECTION_ID>5</CONNECTION_ID>
    <STATUS>0</STATUS>
    <STATUS_CODE>0</STATUS_CODE>
    <USER>root</USER>
    <OS_LOGIN/>
    <HOST>localhost</HOST>
    <IP>127.0.0.1</IP>
    <COMMAND_CLASS>connect</COMMAND_CLASS>
    <CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
    <CONNECTION_ATTRIBUTES>
    <ATTRIBUTE>
    <NAME>_pid</NAME>
    <VALUE>42794</VALUE>
    </ATTRIBUTE>
    ...
    <ATTRIBUTE>
    <NAME>program_name</NAME>
    <VALUE>mysqladmin</VALUE>
    </ATTRIBUTE>
    </CONNECTION_ATTRIBUTES>
    <PRIV_USER>root</PRIV_USER>
    <PROXY_USER/>
    <DB>test</DB>
    </AUDIT_RECORD>
    
    ...
    
    <AUDIT_RECORD>
    <TIMESTAMP>2019-10-03T14:09:38 UTC</TIMESTAMP>
    <RECORD_ID>6_2019-10-03T14:06:33</RECORD_ID>
    <NAME>Query</NAME>
    <CONNECTION_ID>5</CONNECTION_ID>
    <STATUS>0</STATUS>
    <STATUS_CODE>0</STATUS_CODE>
    <USER>root[root] @ localhost [127.0.0.1]</USER>
    <OS_LOGIN/>
    <HOST>localhost</HOST>
    <IP>127.0.0.1</IP>
    <COMMAND_CLASS>drop_table</COMMAND_CLASS>
    <SQLTEXT>DROP TABLE IF EXISTS t</SQLTEXT>
    </AUDIT_RECORD>
    
    ...
    
    <AUDIT_RECORD>
    <TIMESTAMP>2019-10-03T14:09:39 UTC</TIMESTAMP>
    <RECORD_ID>8_2019-10-03T14:06:33</RECORD_ID>
    <NAME>Quit</NAME>
    <CONNECTION_ID>5</CONNECTION_ID>
    <STATUS>0</STATUS>
    <STATUS_CODE>0</STATUS_CODE>
    <USER>root</USER>
    <OS_LOGIN/>
    <HOST>localhost</HOST>
    <IP>127.0.0.1</IP>
    <COMMAND_CLASS>connect</COMMAND_CLASS>
    <CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
    </AUDIT_RECORD>
    
    ...
    
    <AUDIT_RECORD>
    <TIMESTAMP>2019-10-03T14:09:43 UTC</TIMESTAMP>
    <RECORD_ID>11_2019-10-03T14:06:33</RECORD_ID>
    <NAME>Quit</NAME>
    <CONNECTION_ID>6</CONNECTION_ID>
    <STATUS>0</STATUS>
    <STATUS_CODE>0</STATUS_CODE>
    <USER>root</USER>
    <OS_LOGIN/>
    <HOST>localhost</HOST>
    <IP>127.0.0.1</IP>
    <COMMAND_CLASS>connect</COMMAND_CLASS>
    <CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
    </AUDIT_RECORD>
    <AUDIT_RECORD>
    <TIMESTAMP>2019-10-03T14:09:45 UTC</TIMESTAMP>
    <RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID>
    <NAME>NoAudit</NAME>
    <SERVER_ID>1</SERVER_ID>
    </AUDIT_RECORD>
    </AUDIT>
    

    审核日志文件使用UTF-8(每个字符最多4个字节)以XML格式编写。根元素是<AUDIT>。根元素包含<AUDIT_RECORD>元素,每个元素都提供有关已审核事件的信息。当审核日志插件开始编写新的日志文件时,它将编写XML声明并打开<AUDIT>根元素标记。当插件关闭日志文件时,它将写入关闭</AUDIT>根元素标记。文件打开时,关闭标签不存在。

    元素中的<AUDIT_RECORD>元素具有以下特征:

    • 一些元素出现在每个<AUDIT_RECORD>元素中。其他是可选的,并且可能会出现,具体取决于审核记录类型。
    • <AUDIT_RECORD>不能保证元素内元素的顺序。
    • 元素值不是固定长度。长值可能会被截断,如后面给出的元素说明中所述。
    • <>",和&字符作为编码&lt;&gt;&quot;,和&amp;,分别。NUL字节(U + 00)被编码为?字符。
    • 无效的XML字符是使用数字字符引用编码的。有效的XML字符是:

      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
      

    以下元素在每个元素中都是必需的<AUDIT_RECORD>

    • <NAME>

      一个字符串,表示生成审核事件的指令的类型,例如服务器从客户端收到的命令。

      例:

      <NAME>Query</NAME>
      

      一些常见的<NAME>值:

      Audit    When auditing starts, which may be server startup time
      Connect  When a client connects, also known as logging in
      Query    An SQL statement (executed directly)
      Prepare  Preparation of an SQL statement; usually followed by Execute
      Execute  Execution of an SQL statement; usually follows Prepare
      Shutdown Server shutdown
      Quit     When a client disconnects
      NoAudit  Auditing has been turned off
      

      可能的值是AuditBinlog DumpChange userClose stmtConnect OutConnectCreate DBDaemonDebugDelayed insertDrop DBExecuteFetchField ListInit DBKillLong Dat NoAuditPingPrepareProcesslistQueryQuitRefreshRegister SlaveReset stmtSet optionShutdownSleepStatisticsTable DumpTableDeleteTableInsertTableReadTableUpdateTime

      其中许多值与头文件中列出的命令值相对应。例如,和分别对应于和。COM_xxxmy_command.hCreate DBChange userCOM_CREATE_DBCOM_CHANGE_USER

      具有伴随事件<NAME>值的事件。例如,以下语句生成一个事件,两个事件和一个事件:TableXXXQueryQueryTableReadTableInsert

      INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
      

      每个事件都包含和元素,用于标识事件所引用的表。TableXXX<DB><TABLE>

    • <RECORD_ID>

      审核记录的唯一标识符。该值由序列号和时间戳组成,格式为SEQ_TIMESTAMP。当审核日志插件打开审核日志文件时,它将序列号初始化为审核日志文件的大小,然后为记录的每个记录将序列加1。时间戳记是UTC值,其格式表示审核日志插件打开文件的日期和时间。YYYY-MM-DDThh:mm:ss

      例:

      <RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID>
      
    • <TIMESTAMP>

      一个字符串,表示UTC值,其格式表示生成审核事件的日期和时间。例如,与从客户端接收到的SQL语句的执行相对应的事件具有一个值,该值在该语句完成之后而不是在接收到该语句之后发生。YYYY-MM-DDThh:mm:ss UTC<TIMESTAMP>

      例:

      <TIMESTAMP>2019-10-03T14:09:45 UTC</TIMESTAMP>
      

    以下元素是可选<AUDIT_RECORD>元素。它们中的许多仅以特定<NAME>元素值出现。

    • <COMMAND_CLASS>

      指示执行的操作类型的字符串。

      例:

      <COMMAND_CLASS>drop_table</COMMAND_CLASS>
      

      这些值对应于命令计数器。例如,分别为is 和 for 和statement。以下语句显示可能的名称:statement/sql/xxxxxxdrop_tableselectDROP TABLESELECT

      SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name
      FROM performance_schem .events_statements_summary_global_by_event_name
      WHERE EVENT_NAME LIKE 'statement/sql/%'
      ORDER BY name;
      
    • <CONNECTION_ATTRIBUTES>

      从MySQL 8.0.19开始,<COMMAND_CLASS>值为的事件connect可能包含一个<CONNECTION_ATTRIBUTES>元素,用于显示客户端在连接时传递的连接属性。(有关这些属性的信息(也在性能模式表中公开),请参见“性能模式连接属性表”。)

      <CONNECTION_ATTRIBUTES>元件包含一个<ATTRIBUTE>每属性元素,其每一个包含<NAME><VALUE>元素以指示该属性的名称和值,分别。

      例:

      <CONNECTION_ATTRIBUTES>
      <ATTRIBUTE>
      <NAME>_pid</NAME>
      <VALUE>42794</VALUE>
      </ATTRIBUTE>
      <ATTRIBUTE>
      <NAME>_os</NAME>
      <VALUE>osx10.14</VALUE>
      </ATTRIBUTE>
      <ATTRIBUTE>
      <NAME>_platform</NAME>
      <VALUE>x86_64</VALUE>
      </ATTRIBUTE>
      <ATTRIBUTE>
      <NAME>_client_version</NAME>
      <VALUE>8.0.19</VALUE>
      </ATTRIBUTE>
      <ATTRIBUTE>
      <NAME>_client_name</NAME>
      <VALUE>libmysql</VALUE>
      </ATTRIBUTE>
      <ATTRIBUTE>
      <NAME>program_name</NAME>
      <VALUE>mysqladmin</VALUE>
      </ATTRIBUTE>
      </CONNECTION_ATTRIBUTES>
      

      如果事件中没有连接属性,则不会记录任何连接属性,也不会<CONNECTION_ATTRIBUTES>显示任何元素。如果连接尝试失败,客户端未传递任何属性或内部发生连接(例如在服务器启动期间或由插件启动时),则可能发生这种情况。

    • <CONNECTION_ID>

      代表客户端连接标识符的无符号整数。这CONNECTION_ID()与会话中的函数返回的值相同。

      例:

      <CONNECTION_ID>127</CONNECTION_ID>
      
    • <CONNECTION_TYPE>

      与服务器的连接的安全状态。允许的值为TCP/IP(未加密建立的TCP / IP连接),SSL/TLS(通过加密建立的TCP / IP连接),Socket(Unix套接字文件连接),Named Pipe(Windows命名管道连接)和Shared Memory(Windows共享内存连接)。

      例:

      <CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
      
    • <DB>

      代表默认数据库名称的字符串。

      例:

      <DB>test</DB>
      
    • <HOST>

      代表客户端主机名的字符串。

      例:

      <HOST>localhost</HOST>
      
    • <IP>

      代表客户端IP地址的字符串。

      例:

      <IP>127.0.0.1</IP>
      
    • <MYSQL_VERSION>

      代表MySQL服务器版本的字符串。这与VERSION()函数或version系统变量的值相同。

      例:

      <MYSQL_VERSION>5.7.21-log</MYSQL_VERSION>
      
    • <OS_LOGIN>

      一个字符串,代表在身份验证过程中使用的外部用户名,该字符串由用于身份验证客户端的插件设置。使用本地(内置)MySQL身份验证,或者如果插件未设置值,则此元素为空。该值与external_user系统变量的值相同(请参见“代理用户”)。

      例:

      <OS_LOGIN>jeffrey</OS_LOGIN>
      
    • <OS_VERSION>

      一个字符串,表示在其上构建或正在运行服务器的操作系统。

      例:

      <OS_VERSION>x86_64-Linux</OS_VERSION>
      
    • <PRIV_USER>

      一个字符串,代表服务器验证客户端身份的用户。这是服务器用于特权检查的用户名,并且可能与<USER>值不同。

      例:

      <PRIV_USER>jeffrey</PRIV_USER>
      
    • <PROXY_USER>

      代表代理用户的字符串(请参见“代理用户”)。如果用户代理无效,则该值为空。

      例:

      <PROXY_USER>developer</PROXY_USER>
      
    • <SERVER_ID>

      代表服务器ID的无符号整数。这与server_id系统变量的值相同。

      例:

      <SERVER_ID>1</SERVER_ID>
      
    • <SQLTEXT>

      表示SQL语句文本的字符串。该值可以为空。长值可能会被截断。该字符串与审核日志文件本身一样,使用UTF-8写入(每个字符最多4个字节),因此该值可能是转换的结果。例如,原始语句可能已作为SJIS字符串从客户端收到。

      例:

      <SQLTEXT>DELETE FROM t1</SQLTEXT>
      
    • <STARTUP_OPTIONS>

      一个字符串,表示启动MySQL服务器时在命令行或选项文件中给出的选项。第一个选项是服务器可执行文件的路径。

      例:

      <STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld
      --port=3306 --log_output=FILE</STARTUP_OPTIONS>
      
    • <STATUS>

      表示命令状态的无符号整数:0表示成功,如果发生错误则非零。这与mysql_errno()C API函数的值相同。有关<STATUS_CODE>其与的不同之处,请参见说明<STATUS>

      审核日志不包含SQLSTATE值或错误消息。要参见错误代码,SQLSTATE值和消息之间的关联,请参见第B.3.1节“服务器错误消息参考”。

      不记录警告。

      例:

      <STATUS>1051</STATUS>
      
    • <STATUS_CODE>

      表示命令状态的无符号整数:0表示成功,1表示发生错误。

      STATUS_CODE值与值不同STATUSSTATUS_CODE成功为0,错误为1,与Audit Vault的EZ_collector使用者兼容。STATUSmysql_errno()C API函数的值。对于成功,该值为0,对于错误,该值为非零,因此对于错误,不一定为1。

      例:

      <STATUS_CODE>0</STATUS_CODE>
      
    • <TABLE>

      代表表名的字符串。

      例:

      <TABLE>t3</TABLE>
      
    • <USER>

      代表客户端发送的用户名的字符串。这可能与<PRIV_USER>值不同。

      例:

      <USER>root[root] @ localhost [127.0.0.1]</USER>
      
    • <VERSION>

      一个无符号整数,表示审核日志文件格式的版本。

      例:

      <VERSION>1</VERSION>
      
    旧式XML审核日志文件格式

    这是旧式XML格式( udit_log_format=OLD)的示例日志文件,为了便于阅读,对其进行了重新格式化:

    <?xml version="1.0" encoding="utf-8"?>
    <AUDIT>
    <AUDIT_RECORD
    TIMESTAMP="2019-10-03T14:25:00 UTC"
    RECORD_ID="1_2019-10-03T14:25:00"
    NAME="Audit"
    SERVER_ID="1"
    VERSION="1"
    STARTUP_OPTIONS="--port=3306"
    OS_VERSION="i686-Linux"
    MYSQL_VERSION="5.7.21-log"/>
    <AUDIT_RECORD
    TIMESTAMP="2019-10-03T14:25:24 UTC"
    RECORD_ID="2_2019-10-03T14:25:00"
    NAME="Connect"
    CONNECTION_ID="4"
    STATUS="0"
    STATUS_CODE="0"
    USER="root"
    OS_LOGIN=""
    HOST="localhost"
    IP="127.0.0.1"
    COMMAND_CLASS="connect"
    CONNECTION_TYPE="SSL/TLS"
    PRIV_USER="root"
    PROXY_USER=""
    DB="test"/>
    
    ...
    
    <AUDIT_RECORD
    TIMESTAMP="2019-10-03T14:25:24 UTC"
    RECORD_ID="6_2019-10-03T14:25:00"
    NAME="Query"
    CONNECTION_ID="4"
    STATUS="0"
    STATUS_CODE="0"
    USER="root[root] @ localhost [127.0.0.1]"
    OS_LOGIN=""
    HOST="localhost"
    IP="127.0.0.1"
    COMMAND_CLASS="drop_table"
    SQLTEXT="DROP TABLE IF EXISTS t"/>
    
    ...
    
    <AUDIT_RECORD
    TIMESTAMP="2019-10-03T14:25:24 UTC"
    RECORD_ID="8_2019-10-03T14:25:00"
    NAME="Quit"
    CONNECTION_ID="4"
    STATUS="0"
    STATUS_CODE="0"
    USER="root"
    OS_LOGIN=""
    HOST="localhost"
    IP="127.0.0.1"
    COMMAND_CLASS="connect"
    CONNECTION_TYPE="SSL/TLS"/>
    <AUDIT_RECORD
    TIMESTAMP="2019-10-03T14:25:32 UTC"
    RECORD_ID="12_2019-10-03T14:25:00"
    NAME="NoAudit"
    SERVER_ID="1"/>
    </AUDIT>
    

    审核日志文件使用UTF-8(每个字符最多4个字节)以XML格式编写。根元素是<AUDIT>。根元素包含<AUDIT_RECORD>元素,每个元素都提供有关已审核事件的信息。当审核日志插件开始编写新的日志文件时,它将编写XML声明并打开<AUDIT>根元素标记。当插件关闭日志文件时,它将写入关闭</AUDIT>根元素标记。文件打开时,关闭标签不存在。

    <AUDIT_RECORD>元素的属性具有以下特征:

    • 一些属性出现在每个<AUDIT_RECORD>元素中。其他是可选的,并且可能会出现,具体取决于审核记录类型。
    • <AUDIT_RECORD>不能保证元素内属性的顺序。
    • 属性值不是固定长度。长值可能会被截断,如后面给出的属性描述中所示。
    • <>",和&字符作为编码&lt;&gt;&quot;,和&amp;,分别。NUL字节(U + 00)被编码为?字符。
    • 无效的XML字符是使用数字字符引用编码的。有效的XML字符是:

      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
      

    以下属性在每个<AUDIT_RECORD>元素中都是必需的:

    • NAME

      一个字符串,表示生成审核事件的指令的类型,例如服务器从客户端收到的命令。

      例:

      一些常见的NAME值:

      Audit    When auditing starts, which may be server startup time
      Connect  When a client connects, also known as logging in
      Query    An SQL statement (executed directly)
      Prepare  Preparation of an SQL statement; usually followed by Execute
      Execute  Execution of an SQL statement; usually follows Prepare
      Shutdown Server shutdown
      Quit     When a client disconnects
      NoAudit  Auditing has been turned off
      

      可能的值是AuditBinlog DumpChange userClose stmtConnect OutConnectCreate DBDaemonDebugDelayed insertDrop DBExecuteFetchField ListInit DBKillLong Dat NoAuditPingPrepareProcesslistQueryQuitRefreshRegister SlaveReset stmtSet optionShutdownSleepStatisticsTable DumpTableDeleteTableInsertTableReadTableUpdateTime

      其中许多值与头文件中列出的命令值相对应。例如,和分别对应于和。COM_xxxmy_command.h"Create DB""Change user"COM_CREATE_DBCOM_CHANGE_USER

      具有伴随事件NAME值的事件。例如,以下语句生成一个事件,两个事件和一个事件:TableXXXQueryQueryTableReadTableInsert

      INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
      

      每个事件都具有和属性,以标识事件所引用的表。TableXXXDBTABLE

      Connect旧式XML审核日志格式的事件不包括连接属性。

    • RECORD_ID

      审核记录的唯一标识符。该值由序列号和时间戳组成,格式为SEQ_TIMESTAMP。当审核日志插件打开审核日志文件时,它将序列号初始化为审核日志文件的大小,然后为记录的每个记录将序列加1。时间戳记是UTC值,其格式表示审核日志插件打开文件的日期和时间。YYYY-MM-DDThh:mm:ss

      例:RECORD_

    • TIMESTAMP

      一个字符串,表示UTC值,其格式表示生成审核事件的日期和时间。例如,与从客户端接收到的SQL语句的执行相对应的事件具有一个值,该值在该语句完成之后而不是在接收到该语句之后发生。YYYY-MM-DDThh:mm:ss UTCTIMESTAMP

      例:TIMESTAMP="2019-10-03T14:25:32 UTC"

    以下属性是<AUDIT_RECORD>元素中的可选属性。其中许多仅针对具有特定NAME属性值的元素发生。

    • COMMAND_CLASS

      指示执行的操作类型的字符串。

      例:COMMAND_

      这些值对应于命令计数器。例如,分别为is 和 for 和statement。以下语句显示可能的名称:statement/sql/xxxxxxdrop_tableselectDROP TABLESELECT

      SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name
      FROM performance_schem .events_statements_summary_global_by_event_name
      WHERE EVENT_NAME LIKE 'statement/sql/%'
      ORDER BY name;
      
    • CONNECTION_ID

      代表客户端连接标识符的无符号整数。这CONNECTION_ID()与会话中的函数返回的值相同。

      例:CONNECTION_

    • CONNECTION_TYPE

      与服务器的连接的安全状态。允许的值为TCP/IP(未加密建立的TCP / IP连接),SSL/TLS(通过加密建立的TCP / IP连接),Socket(Unix套接字文件连接),Named Pipe(Windows命名管道连接)和Shared Memory(Windows共享内存连接)。

      例:CONNECTION_TYPE="SSL/TLS"

    • DB

      代表默认数据库名称的字符串。

      例:DB="test"

    • HOST

      代表客户端主机名的字符串。

      例:HOST="localhost"

    • IP

      代表客户端IP地址的字符串。

      例:IP="127.0.0.1"

    • MYSQL_VERSION

      代表MySQL服务器版本的字符串。这与VERSION()函数或version系统变量的值相同。

      例:MYSQL_VERSION="5.7.21-log"

    • OS_LOGIN

      一个字符串,代表在身份验证过程中使用的外部用户名,该字符串由用于身份验证客户端的插件设置。使用本地(内置)MySQL身份验证,或者如果插件未设置值,则此属性为空。该值与external_user系统变量的值相同(请参见“代理用户”)。

      例:OS_LOGIN="jeffrey"

    • OS_VERSION

      一个字符串,表示在其上构建或正在运行服务器的操作系统。

      例:OS_VERSION="x86_64-Linux"

    • PRIV_USER

      一个字符串,代表服务器验证客户端身份的用户。这是服务器用于特权检查的用户名,它可能与USER值不同。

      例:PRIV_USER="jeffrey"

    • PROXY_USER

      代表代理用户的字符串(请参见“代理用户”)。如果用户代理无效,则该值为空。

      例:PROXY_USER="developer"

    • SERVER_ID

      代表服务器ID的无符号整数。这与server_id系统变量的值相同。

      例:SERVER_

    • SQLTEXT

      表示SQL语句文本的字符串。该值可以为空。长值可能会被截断。该字符串与审核日志文件本身一样,使用UTF-8写入(每个字符最多4个字节),因此该值可能是转换的结果。例如,原始语句可能已作为SJIS字符串从客户端收到。

      例:SQLTEXT="DELETE FROM t1"

    • STARTUP_OPTIONS

      一个字符串,表示启动MySQL服务器时在命令行或选项文件中给出的选项。

      例:STARTUP_OPTIONS="--port=3306 --log_output=FILE"

    • STATUS

      表示命令状态的无符号整数:0表示成功,如果发生错误则非零。这与mysql_errno()C API函数的值相同。有关STATUS_CODE其与的不同之处,请参见说明STATUS

      审核日志不包含SQLSTATE值或错误消息。要参见错误代码,SQLSTATE值和消息之间的关联,请参见第B.3.1节“服务器错误消息参考”。

      不记录警告。

      例:STATUS="1051"

    • STATUS_CODE

      表示命令状态的无符号整数:0表示成功,1表示发生错误。

      STATUS_CODE值与值不同STATUSSTATUS_CODE成功为0,错误为1,与Audit Vault的EZ_collector使用者兼容。STATUSmysql_errno()C API函数的值。对于成功,该值为0,对于错误,该值为非零,因此对于错误,不一定为1。

      例:STATUS_CODE="0"

    • TABLE

      代表表名的字符串。

      例:TABLE="t3"

    • USER

      代表客户端发送的用户名的字符串。这可能与PRIV_USER值不同。

    • VERSION

      一个无符号整数,表示审核日志文件格式的版本。

      例:VERSION="1"

    JSON审核日志文件格式

    对于JSON格式的审核日志记录( udit_log_format=JSON),日志文件内容形成一个JSON数组,其中每个数组元素均表示作为JSON键-值对散列的已审核事件。完整事件记录的示例将在本节后面显示。以下是部分事件的摘录:

    [
    {
    "timestamp": "2019-10-03 13:50:01",
    "id": 0,
    "class": "audit",
    "event": "startup",
    ...
    },
    {
    "timestamp": "2019-10-03 15:02:32",
    "id": 0,
    "class": "connection",
    "event": "connect",
    ...
    },
    ...
    {
    "timestamp": "2019-10-03 17:37:26",
    "id": 0,
    "class": "table_access",
    "event": "insert",
    ...
    }
    ...
    ]
    

    审核日志文件使用UTF-8写入(每个字符最多4个字节)。当审核日志插件开始写入新的日志文件时,它将写入开始[数组标记。当插件关闭日志文件时,它将写入关闭]数组标记。文件打开时,关闭标记不存在。

    审核记录中的项目具有以下特征:

    • 一些项出现在每个审核记录中。其他是可选的,并且可能会出现,具体取决于审核记录类型。
    • 不能保证审核记录中的项目顺序。
    • 项目值不是固定长度。长值可能会被截断,如后面给出的项目说明中所述。
    • "\字符被编码为\"\\分别。

    以下示例显示了不同事件类型(由classevent项目指示)的JSON对象格式,并对其格式进行了略微重新设置以提高可读性:

    审核启动事件:

    { "timestamp": "2019-10-03 14:21:56",
    "id": 0,
    "class": "audit",
    "event": "startup",
    "connection_id": 0,
    "startup_data": { "server_id": 1,
    "os_version": "i686-Linux",
    "mysql_version": "5.7.21-log",
    "args": ["/usr/local/mysql/bin/mysqld",
    "--loose-audit-log-format=JSON",
    "--log-error=log.err",
    "--pid-file=mysqld.pid",
    "--port=3306" ] } }
    

    当审计日志插件开始作为服务器启动的结果(而不是在运行时被启用),connection_id被设置为0,并且 ccountlogin不存在。

    审核关闭事件:

    { "timestamp": "2019-10-03 14:28:20",
    "id": 3,
    "class": "audit",
    "event": "shutdown",
    "connection_id": 0,
    "shutdown_data": { "server_id": 1 } }
    

    当审计日志插件被卸载为服务器关闭的结果(而不是在运行时被禁用),connection_id被设置为0,并且 ccountlogin不存在。

    连接或更改用户事件:

    { "timestamp": "2019-10-03 14:23:18",
    "id": 1,
    "class": "connection",
    "event": "connect",
    "connection_id": 5,
    "account": { "user": "root", "host": "localhost" },
    "login": { "user": "root", "os": "", "ip": "::1", "proxy": "" },
    "connection_data": { "connection_type": "ssl",
    "status": 0,
    "db": "test",
    "connection_attributes": {
    "_pid": "43236",
    ...
    "program_name": "mysqladmin"
    } }
    }
    

    断开事件:

    { "timestamp": "2019-10-03 14:24:45",
    "id": 3,
    "class": "connection",
    "event": "disconnect",
    "connection_id": 5,
    "account": { "user": "root", "host": "localhost" },
    "login": { "user": "root", "os": "", "ip": "::1", "proxy": "" },
    "connection_data": { "connection_type": "ssl" } }
    

    查询事件:

    { "timestamp": "2019-10-03 14:23:35",
    "id": 2,
    "class": "general",
    "event": "status",
    "connection_id": 5,
    "account": { "user": "root", "host": "localhost" },
    "login": { "user": "root", "os": "", "ip": "::1", "proxy": "" },
    "general_data": { "command": "Query",
    "sql_command": "show_variables",
    "query": "SHOW VARIABLES",
    "status": 0 } }
    

    表访问事件(读取,删除,插入,更新):

    { "timestamp": "2019-10-03 14:23:41",
    "id": 0,
    "class": "table_access",
    "event": "insert",
    "connection_id": 5,
    "account": { "user": "root", "host": "localhost" },
    "login": { "user": "root", "os": "", "ip": "127.0.0.1", "proxy": "" },
    "table_access_data": { "db": "test",
    "table": "t1",
    "query": "INSERT INTO t1 (i) VALUES(1),(2),(3)",
    "sql_command": "insert" } }
    

    以下列表中的项目显示在JSON格式审核记录的顶级:每个项目值可以是标量或JSON哈希。对于具有哈希值的项目,描述仅列出该哈希内的项目名称。有关第二级哈希项的更完整说明,请参阅本节后面。

    • ccount

      与事件关联的MySQL帐户。该值是一个散列,其中包含CURRENT_USER()user,,中的函数值等效的这些项host

      例:

      "account": { "user": "root", "host": "localhost" }
      
    • class

      表示事件类的字符串。当与event指定事件子类的项目一起使用时,该类定义事件的类型。

      例:

      "class": "connection"
      

      下表显示了classevent值的允许组合。

      表6.28审核日志类和事件组合

      类值允许的事件值
      uditstartupshutdown
      connectionconnectchange_userdisconnect
      generalstatus
      table_access_dat readdeleteinsertupdate

    • connection_dat

      有关客户端连接的信息。的值是包含这些项目的哈希:connection_typestatusdb,和可能的connection_attributes。仅对于class值为的审核记录,才会出现此项connection

      例:

      "connection_data": { "connection_type": "ssl",
      "status": 0,
      "db": "test" }
      

      从MySQL 8.0.19,具有事件class的值connectionevent的值connect可包括一个connection_attributes显示由所述客户端在连接时通过连接属性的项目。(有关这些属性的信息(也在性能模式表中公开),请参见“性能模式连接属性表”。)

      connection_attributes值是一个哈希,通过其名称和值表示每个属性。

      例:

      "connection_attributes": {
      "_pid": "43236",
      "_os": "osx10.14",
      "_platform": "x86_64",
      "_client_version": "8.0.19",
      "_client_name": "libmysql",
      "program_name": "mysqladmin"
      }
      

      如果事件中不存在连接属性,则不会记录任何日志,也不会connection_attributes显示任何项目。如果连接尝试失败,客户端未传递任何属性或内部发生连接(例如在服务器启动期间或由插件启动时),则可能发生这种情况。

    • connection_id

      代表客户端连接标识符的无符号整数。这CONNECTION_ID()与会话中的函数返回的值相同。

      例:

      "connection_id": 5
      
    • event

      一个字符串,代表事件类的子类。与class指定事件类的项目一起使用时,子类定义事件的类型。有关更多信息,请参阅class项目说明。

      例:

      "event": "connect"
      
    • general_dat

      有关已执行的语句或命令的信息。的值是包含这些项目的哈希:commandsql_commandquerystatus。仅对于class值为的审核记录,才会出现此项general

      例:

      "general_data": { "command": "Query",
      "sql_command": "show_variables",
      "query": "SHOW VARIABLES",
      "status": 0 }
      
    • id

      表示事件ID的无符号整数。

      例:

      "id": 2
      

      对于具有相同timestamp值的审核记录,它们的id值将它们区分并形成一个序列。在审核日志中,timestamp/id对是唯一的。这些对是书签,用于标识日志中的事件位置。

    • login

      指示客户端如何连接到服务器的信息。的值是包含这些项目的哈希:userosipproxy

      例:

      "login": { "user": "root", "os": "", "ip": "::1", "proxy": "" }
      
    • shutdown_dat

      有关审核日志插件终止的信息。该值是包含以下各项的哈希值:server_id仅当审计记录的,class和分别event udit和时shutdown,才出现该项目。

      例:

      "shutdown_data": { "server_id": 1 }
      
    • startup_dat

      与审核日志插件初始化有关的信息。的值是包含这些项目的哈希:server_idos_versionmysql_version rgs。此产品仅适用于审计记录出现classevent uditstartup分别。

      例:

      "startup_data": { "server_id": 1,
      "os_version": "i686-Linux",
      "mysql_version": "5.7.21-log",
      "args": ["/usr/local/mysql/bin/mysqld",
      "--loose-audit-log-format=JSON",
      "--log-error=log.err",
      "--pid-file=mysqld.pid",
      "--port=3306" ] }
      
    • table_access_dat

      有关访问表的信息。该值是包含这些项目的哈希:dbtablequerysql_command,此产品仅适用于一个审计记录发生class的价值table_access

      例:

      "table_access_data": { "db": "test",
      "table": "t1",
      "query": "INSERT INTO t1 (i) VALUES(1),(2),(3)",
      "sql_command": "insert" }
      
    • timestamp

      一个字符串,表示UTC值,其YYYY-MM-DD hh:mm:ss格式表示生成审核事件的日期和时间。例如,与从客户端接收到的SQL语句的执行相对应的事件具有一个timestamp值,该值在该语句完成之后而不是在接收到该语句之后发生。

      例:

      "timestamp": "2019-10-03 13:50:01"
      

      对于具有相同timestamp值的审核记录,它们的id值将它们区分并形成一个序列。在审核日志中,timestamp/id对是唯一的。这些对是书签,用于标识日志中的事件位置。

    这些项目显示在与JSON格式审核记录的顶级项目相关的哈希值中:

    • rgs

      启动MySQL服务器时,在命令行或选项文件中提供的选项数组。第一个选项是服务器可执行文件的路径。

      例:

      "args": ["/usr/local/mysql/bin/mysqld",
      "--loose-audit-log-format=JSON",
      "--log-error=log.err",
      "--pid-file=mysqld.pid",
      "--port=3306" ]
      
    • command

      一个字符串,表示生成审核事件的指令的类型,例如服务器从客户端收到的命令。

      例:

      "command": "Query"
      
    • connection_type

      与服务器的连接的安全状态。允许的值为tcp/ip(未加密建立的TCP / IP连接),ssl(通过加密建立的TCP / IP连接),socket(Unix套接字文件连接),named_pipe(Windows命名管道连接)和shared_memory(Windows共享内存连接)。

      例:

      "connection_type": "tcp/tcp"
      
    • db

      代表数据库名称的字符串。对于connection_dat ,它是默认数据库。对于table_access_dat ,它是表数据库。

      例:

      "db": "test"
      
    • host

      代表客户端主机名的字符串。

      例:

      "host": "localhost"
      
    • ip

      代表客户端IP地址的字符串。

      例:

      "ip": "::1"
      
    • mysql_version

      代表MySQL服务器版本的字符串。这与VERSION()函数或version系统变量的值相同。

      例:

      "mysql_version": "5.7.21-log"
      
    • os

      一个字符串,代表在身份验证过程中使用的外部用户名,该字符串由用于身份验证客户端的插件设置。使用本地(内置)MySQL身份验证,或者如果插件未设置值,则此属性为空。该值与external_user系统变量的值相同。请参见“代理用户”。

      例:

      "os": "jeffrey"
      
    • os_version

      一个字符串,表示在其上构建或正在运行服务器的操作系统。

      例:

      "os_version": "i686-Linux"
      
    • proxy

      代表代理用户的字符串(请参见“代理用户”)。如果用户代理无效,则该值为空。

      例:

      "proxy": "developer"
      
    • query

      表示SQL语句文本的字符串。该值可以为空。长值可能会被截断。该字符串与审核日志文件本身一样,使用UTF-8写入(每个字符最多4个字节),因此该值可能是转换的结果。例如,原始语句可能已作为SJIS字符串从客户端收到。

      例:

      "query": "DELETE FROM t1"
      
    • server_id

      代表服务器ID的无符号整数。这与server_id系统变量的值相同。

      例:

      "server_id": 1
      
    • sql_command

      指示SQL语句类型的字符串。

      例:

      "sql_command": "insert"
      

      这些值对应于命令计数器。例如,分别为is 和 for 和statement。以下语句显示可能的名称:statement/sql/xxxxxxdrop_tableselectDROP TABLESELECT

      SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name
      FROM performance_schem .events_statements_summary_global_by_event_name
      WHERE EVENT_NAME LIKE 'statement/sql/%'
      ORDER BY name;
      
    • status

      表示命令状态的无符号整数:0表示成功,如果发生错误则非零。这与mysql_errno()C API函数的值相同。

      审核日志不包含SQLSTATE值或错误消息。要参见错误代码,SQLSTATE值和消息之间的关联,请参见第B.3.1节“服务器错误消息参考”。

      不记录警告。

      例:

      "status": 1051
      
    • table

      代表表名的字符串。

      例:

      "table": "t1"
      
    • user

      代表用户名的字符串。含义因user发生的项目而异:

      • ccount项目中,user是一个字符串,代表服务器验证客户端身份的用户。这是服务器用于特权检查的用户名。
      • login项目中,user是一个字符串,代表客户端发送的用户名。

      例:

      "user": "root"