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>不能保证元素内元素的顺序。
- 元素值不是固定长度。长值可能会被截断,如后面给出的元素说明中所述。
- <,- >,- ",和- &字符作为编码- <,- >,- ",和- &,分别。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 - 可能的值是 - Audit,- Binlog Dump,- Change user,- Close stmt,- Connect Out,- Connect,- Create DB,- Daemon,- Debug,- Delayed insert,- Drop DB,- Execute,- Fetch,- Field List,- Init DB,- Kill,- Long Dat,- NoAudit,- Ping,- Prepare,- Processlist,- Query,- Quit,- Refresh,- Register Slave,- Reset stmt,- Set option,- Shutdown,- Sleep,- Statistics,- Table Dump,- TableDelete,- TableInsert,- TableRead,- TableUpdate,- Time。- 其中许多值与头文件中列出的命令值相对应。例如,和分别对应于和。 - COM_xxx- my_command.h- Create DB- Change user- COM_CREATE_DB- COM_CHANGE_USER- 具有伴随事件 - <NAME>值的事件。例如,以下语句生成一个事件,两个事件和一个事件:- TableXXX- Query- Query- TableRead- TableInsert- 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/xxx- xxx- drop_table- select- DROP TABLE- SELECT- 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值与值不同- STATUS:- STATUS_CODE成功为0,错误为1,与Audit Vault的EZ_collector使用者兼容。- STATUS是- mysql_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>不能保证元素内属性的顺序。
- 属性值不是固定长度。长值可能会被截断,如后面给出的属性描述中所示。
- <,- >,- ",和- &字符作为编码- <,- >,- ",和- &,分别。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 - 可能的值是 - Audit,- Binlog Dump,- Change user,- Close stmt,- Connect Out,- Connect,- Create DB,- Daemon,- Debug,- Delayed insert,- Drop DB,- Execute,- Fetch,- Field List,- Init DB,- Kill,- Long Dat,- NoAudit,- Ping,- Prepare,- Processlist,- Query,- Quit,- Refresh,- Register Slave,- Reset stmt,- Set option,- Shutdown,- Sleep,- Statistics,- Table Dump,- TableDelete,- TableInsert,- TableRead,- TableUpdate,- Time。- 其中许多值与头文件中列出的命令值相对应。例如,和分别对应于和。 - COM_xxx- my_command.h- "Create DB"- "Change user"- COM_CREATE_DB- COM_CHANGE_USER- 具有伴随事件 - NAME值的事件。例如,以下语句生成一个事件,两个事件和一个事件:- TableXXX- Query- Query- TableRead- TableInsert- INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2; - 每个事件都具有和属性,以标识事件所引用的表。 - TableXXX- DB- TABLE- Connect旧式XML审核日志格式的事件不包括连接属性。
- RECORD_ID- 审核记录的唯一标识符。该值由序列号和时间戳组成,格式为 - SEQ_TIMESTAMP。当审核日志插件打开审核日志文件时,它将序列号初始化为审核日志文件的大小,然后为记录的每个记录将序列加1。时间戳记是UTC值,其格式表示审核日志插件打开文件的日期和时间。- YYYY-MM-DDThh:mm:ss- 例: - RECORD_
- TIMESTAMP- 一个字符串,表示UTC值,其格式表示生成审核事件的日期和时间。例如,与从客户端接收到的SQL语句的执行相对应的事件具有一个值,该值在该语句完成之后而不是在接收到该语句之后发生。 - YYYY-MM-DDThh:mm:ss UTC- TIMESTAMP- 例: - TIMESTAMP="2019-10-03T14:25:32 UTC"
以下属性是<AUDIT_RECORD>元素中的可选属性。其中许多仅针对具有特定NAME属性值的元素发生。
- COMMAND_CLASS- 指示执行的操作类型的字符串。 - 例: - COMMAND_- 这些值对应于命令计数器。例如,分别为is 和 for 和statement。以下语句显示可能的名称: - statement/sql/xxx- xxx- drop_table- select- DROP TABLE- SELECT- 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值与值不同- STATUS:- STATUS_CODE成功为0,错误为1,与Audit Vault的EZ_collector使用者兼容。- STATUS是- mysql_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个字节)。当审核日志插件开始写入新的日志文件时,它将写入开始[数组标记。当插件关闭日志文件时,它将写入关闭]数组标记。文件打开时,关闭标记不存在。
审核记录中的项目具有以下特征:
- 一些项出现在每个审核记录中。其他是可选的,并且可能会出现,具体取决于审核记录类型。
- 不能保证审核记录中的项目顺序。
- 项目值不是固定长度。长值可能会被截断,如后面给出的项目说明中所述。
- "和- \字符被编码为- \"与- \\分别。
以下示例显示了不同事件类型(由class和event项目指示)的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,并且 ccount与login不存在。
审核关闭事件:
{ "timestamp": "2019-10-03 14:28:20",
"id": 3,
"class": "audit",
"event": "shutdown",
"connection_id": 0,
"shutdown_data": { "server_id": 1 } }
当审计日志插件被卸载为服务器关闭的结果(而不是在运行时被禁用),connection_id被设置为0,并且 ccount与login不存在。
连接或更改用户事件:
{ "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" - 下表显示了 - class和- event值的允许组合。- 表6.28审核日志类和事件组合 - 类值 - 允许的事件值 - udit- startup,- shutdown- connection- connect,- change_user,- disconnect- general- status- table_access_dat- read,- delete,- insert,- update
- connection_dat- 有关客户端连接的信息。的值是包含这些项目的哈希: - connection_type,- status,- db,和可能的- connection_attributes。仅对于- class值为的审核记录,才会出现此项- connection。- 例: - "connection_data": { "connection_type": "ssl", "status": 0, "db": "test" }- 从MySQL 8.0.19,具有事件 - class的值- connection和- event的值- 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- 有关已执行的语句或命令的信息。的值是包含这些项目的哈希: - command,- sql_command,- query,- status。仅对于- class值为的审核记录,才会出现此项- general。- 例: - "general_data": { "command": "Query", "sql_command": "show_variables", "query": "SHOW VARIABLES", "status": 0 }
- id- 表示事件ID的无符号整数。 - 例: - "id": 2 - 对于具有相同 - timestamp值的审核记录,它们的- id值将它们区分并形成一个序列。在审核日志中,- timestamp/- id对是唯一的。这些对是书签,用于标识日志中的事件位置。
- login- 指示客户端如何连接到服务器的信息。的值是包含这些项目的哈希: - user,- os,- ip,- proxy。- 例: - "login": { "user": "root", "os": "", "ip": "::1", "proxy": "" }
- shutdown_dat- 有关审核日志插件终止的信息。该值是包含以下各项的哈希值: - server_id仅当审计记录的,- class和分别- event为- udit和时- shutdown,才出现该项目。- 例: - "shutdown_data": { "server_id": 1 }
- startup_dat- 与审核日志插件初始化有关的信息。的值是包含这些项目的哈希: - server_id,- os_version,- mysql_version,- rgs。此产品仅适用于审计记录出现- class和- event值- udit和- startup分别。- 例: - "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- 有关访问表的信息。该值是包含这些项目的哈希: - db,- table,- query,- sql_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/xxx- xxx- drop_table- select- DROP TABLE- SELECT- 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" 
- 在
