10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.6 mb
HTML下载(RPM)- 8.1 mb
手册页(TGZ)- 260.6 kb
手册页(Zip)- 371.7 kb
信息(Gzip)- 3.9 mb
信息(邮政编码)- 3.9 mb
本手册节选

6.4.5.4审计日志文件格式

每当可审计事件发生时,MySQL服务器调用审计日志插件将审计记录写入其日志文件。通常在插件启动后写入的第一个审计记录包含服务器描述和启动选项。后面的元素表示事件,如客户端连接和断开连接事件、执行的SQL语句等。只记录顶级语句,而不记录触发器或存储过程等存储程序中的语句。语句引用的文件的内容加载数据没有记录。

要选择审计日志插件用于写入日志文件的日志格式,请设置audit_log_format服务器启动时的系统变量。这些格式是可用的:

缺省情况下,审计日志文件内容采用新型XML格式,不进行压缩和加密。

请注意

有关更改日志格式时要考虑的问题的信息,请参见

  • 新型XML审计日志文件格式

    下面是一个新样式XML格式的日志文件示例(audit_log_format = NEW),为方便阅读而略作调整:

    <?XML版本="1.0"编码="utf-8"?><审计>< AUDIT_RECORD ><时间>2019-10-03T14:06:33 UTC 1_2019-10-03T14:06:33 Audit 1 1 /usr/local/mysql/bin/mysqld --socket=/usr/local/mysql/mysql.sock --port=3306 i686-Linux 5.7.21-log   2019-10-03T14:09:38 UTC 2_2019-10-03T14:06:33 Connect 5 0 0 root  localhost 127.0.0.1 connect SSL/TLS   _pid 42794  ...  program_name mysqladmin   root  test  ...  2019-10-03T14:09:38 UTC 6_2019-10-03T14:06:33 Query 5 0 0 root[root] @ localhost [127.0.0.1]  localhost 127.0.0.1 drop_table DROP TABLE IF EXISTS t  ...  2019-10-03T14:09:39 UTC 8_2019-10-03T14:06:33 Quit 5 0 0 root  localhost 127.0.0.1 connect SSL/TLS  ...  2019-10-03T14:09:43 UTC 11_2019-10-03T14:06:33 Quit 6 0 0 root  localhost 127.0.0.1 connect SSL/TLS   2019-10-03T14:09:45 UTC 12_2019-10-03T14:06:33 NoAudit 1  

    审计日志文件被写入XML,使用UTF-8(每个字符最多4个字节)。根元素是<审计>.根元素包含< AUDIT_RECORD >元素,每个元素提供关于审计事件的信息。当审计日志插件开始写入一个新的日志文件时,它会写入XML声明并打开<审计>根元素标记。当插件关闭一个日志文件时,它写入关闭> < /审计根元素标记。当文件打开时,关闭标记不存在。

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

    • 有些元素出现在每一个< AUDIT_RECORD >元素。其他是可选的,可能会根据审计记录类型出现。

    • 元素的顺序< AUDIT_RECORD >元素不能保证。

    • 元素值不是固定长度的。长值可能会被截断,如后面给出的元素描述所示。

    • <>,字符编码为& lt;比;“;,,,分别。NUL字节(U+00)编码为?的性格。

    • 不作为XML字符有效的字符使用数字字符引用进行编码。有效的XML字符包括:

      # x9 | # xA | # xD | (# x20的——# xD7FF) | (# xE000 - # xFFFD) | (# x10000 - # x10FFFF)

    以下元素在每个< AUDIT_RECORD >元素:

    • <名称>

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

      例子:

      查询<名称> < /名称>

      一些常见的<名称>价值观:

      Audit开始审计,可能是服务器启动时间Connect客户端连接,也就是登录Query一条SQL语句(直接执行)Prepare SQL语句的准备;通常后跟Execute Execute执行SQL语句;通常在Prepare Shutdown Server Shutdown后使用Quit当客户端断开连接NoAudit审计已关闭

      可能的值为审计Binlog转储更改用户密切的支撑连接了连接创建数据库守护进程调试延迟插入删除数据库执行获取字段列表初始化数据库杀了长数据NoAudit准备Processlist查询辞职刷新注册的奴隶复位支撑设置选项关闭睡眠统计数据表转储TableDeleteTableInsertTableReadTableUpdate时间

      这些值中的许多对应于COM_xxx命令中列出的值my_command.h头文件。例如,创建数据库而且更改用户对应于COM_CREATE_DB而且COM_CHANGE_USER,分别。

      事件有<名称>的值表格XXX查询事件。例如,下面的语句生成一个查询事件,两个TableRead事件和一个TableInsert事件:

      INSERT INTO t3 SELECT t1*从t1连接t2;

      每一个表格XXX事件包含< DB >而且<表>元素来标识事件所引用的表。

    • < RECORD_ID >

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

      例子:

      12 _2019-10-03t14:06:33 < RECORD_ID > < / RECORD_ID >
    • <时间>

      中表示UTC值的字符串YYYY-MM-DDThh: mm: ssUTC表示产生审计事件的日期和时间的格式。例如,从客户端接收到的与执行SQL语句相对应的事件具有<时间>值在语句结束后发生,而不是在收到语句时发生。

      例子:

      <时间> 2019 - 10 - 03 t14:09:45 UTC时间戳> < /

    中的下列元素是可选的< AUDIT_RECORD >元素。其中许多只发生在特定的<名称>元素值。

旧式XML审计日志文件格式

下面是一个旧式XML格式的示例日志文件(audit_log_format =老),为方便阅读而略作调整:

<?XML版本="1.0"编码="utf-8"?><审计>  ...  ...   

审计日志文件被写入XML,使用UTF-8(每个字符最多4个字节)。根元素是<审计>.根元素包含< AUDIT_RECORD >元素,每个元素提供关于审计事件的信息。当审计日志插件开始写入一个新的日志文件时,它会写入XML声明并打开<审计>根元素标记。当插件关闭一个日志文件时,它写入关闭> < /审计根元素标记。当文件打开时,关闭标记不存在。

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

  • 一些属性出现在每个< AUDIT_RECORD >元素。其他是可选的,可能会根据审计记录类型出现。

  • 属性中的属性顺序< AUDIT_RECORD >元素不能保证。

  • 属性值不是固定长度的。长值可能会被截断,如后面给出的属性描述所示。

  • <>,字符编码为& lt;比;“;,,,分别。NUL字节(U+00)编码为?的性格。

  • 不作为XML字符有效的字符使用数字字符引用进行编码。有效的XML字符包括:

    # x9 | # xA | # xD | (# x20的——# xD7FF) | (# xE000 - # xFFFD) | (# x10000 - # x10FFFF)

以下属性在每个< AUDIT_RECORD >元素:

  • 的名字

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

    例子:NAME = "查询"

    一些常见的的名字价值观:

    Audit开始审计,可能是服务器启动时间Connect客户端连接,也就是登录Query一条SQL语句(直接执行)Prepare SQL语句的准备;通常后跟Execute Execute执行SQL语句;通常在Prepare Shutdown Server Shutdown后使用Quit当客户端断开连接NoAudit审计已关闭

    可能的值为审计Binlog转储更改用户密切的支撑连接了连接创建数据库守护进程调试延迟插入删除数据库执行获取字段列表初始化数据库杀了长数据NoAudit准备Processlist查询辞职刷新注册的奴隶复位支撑设置选项关闭睡眠统计数据表转储TableDeleteTableInsertTableReadTableUpdate时间

    这些值中的许多对应于COM_xxx命令中列出的值my_command.h头文件。例如,“创建DB”而且“更改用户”对应于COM_CREATE_DB而且COM_CHANGE_USER,分别。

    事件有的名字的值表格XXX查询事件。例如,下面的语句生成一个查询事件,两个TableRead事件和一个TableInsert事件:

    INSERT INTO t3 SELECT t1*从t1连接t2;

    每一个表格XXX事件DB而且表格属性来标识事件引用的表。

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

  • RECORD_ID

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

    例子:RECORD_ID = " 12 _2019-10-03t14:25:00 "

  • 时间戳

    中表示UTC值的字符串YYYY-MM-DDThh: mm: ssUTC表示产生审计事件的日期和时间的格式。例如,从客户端接收到的与执行SQL语句相对应的事件具有时间戳值在语句结束后发生,而不是在收到语句时发生。

    例子:时间戳= " 2019 - 10 - 03 - t14:25:32 UTC”

中的下列属性是可选的< AUDIT_RECORD >元素。的特定值的元素才会出现这种情况的名字属性。

  • COMMAND_CLASS

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

    例子:COMMAND_CLASS = " drop_table "

    的值对应声明/ sql /xxx命令计数器。例如,xxxdrop_table而且选择删除表而且选择分别陈述。下面的语句显示可能的名称:

    SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name FROM performance_schema事件s_statements_summary_global_by_event_name WHERE EVENT_NAME LIKE 'statement/sql/%' ORDER BY name;
  • CONNECTION_ID

    表示客户端连接标识符的无符号整数。方法返回的值相同CONNECTION_ID ()在会话内执行函数。

    例子:CONNECTION_ID = " 127 "

  • CONNECTION_TYPE

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

    例子:CONNECTION_TYPE = " SSL / TLS "

  • DB

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

    例子:DB = "测试"

  • 宿主

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

    例子:主机= " localhost "

  • 知识产权

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

    例子:IP = " 127.0.0.1 "

  • MYSQL_VERSION

    表示MySQL服务器版本的字符串。这就等于(版本)函数或版本系统变量。

    例子:MYSQL_VERSION = " 5.7.21-log "

  • OS_LOGIN

    表示认证过程中使用的外部用户名的字符串,由用于认证客户端的插件设置。使用本地(内置)MySQL身份验证,或者如果插件没有设置该值,此属性为空。该值与external_user系统变量(见OS_LOGIN = " jeffrey "

  • OS_VERSION

    表示构建或运行服务器的操作系统的字符串。

    例子:OS_VERSION = " x86_64-Linux "

  • PRIV_USER

    一个字符串,表示服务器验证客户端的用户。这是服务器用于权限检查的用户名,它可能与用户价值。

    例子:PRIV_USER = " jeffrey "

  • PROXY_USER

    表示代理用户的字符串(请参阅PROXY_USER =“开发人员”

  • SERVER_ID

    表示服务器ID的无符号整数。这就等于server_id系统变量。

    例子:SERVER_ID = " 1 "

  • SQLTEXT

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

    例子:SQLTEXT="DELETE FROM t1"

  • STARTUP_OPTIONS

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

    例子:STARTUP_OPTIONS = "——端口= 3306 log_output =文件”

  • 状态

    表示命令状态的无符号整数:0表示成功,非0表示发生错误。这就等于mysql_errno ()C语言API函数。参见STATUS_CODE以了解它与状态

    审计日志中没有SQLSTATE值和错误提示。要查看错误代码、SQLSTATE值和消息之间的关联,请参见服务器错误信息参考

    警告不会被记录。

    例子:状态= " 1051 "

  • STATUS_CODE

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

    STATUS_CODE值不同于状态值:STATUS_CODE为0表示成功,为1表示错误,这与审计库的EZ_collector消费者兼容。状态是值mysql_errno ()C语言API函数。成功为0,错误为非0,因此错误不一定为1。

    例子:STATUS_CODE = " 0 "

  • 表格

    表示表名的字符串。

    例子:表= " t3 "

  • 用户

    表示客户端发送的用户名的字符串。这可能与PRIV_USER价值。

  • 版本

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

    例子:VERSION = " 1 "

JSON审计日志文件格式

对于json格式的审计日志记录(audit_log_format = JSON),则日志文件内容为aJSON数组,其中每个数组元素表示一个审计事件为JSON键值对的哈希。完整事件记录的示例将在本节后面出现。以下是部分事件摘录:

[{“时间戳”:“2019-10-03 13:50:01”、“id”:0,“类”:“审计”、“事件”:“启动”,…},{“时间戳”:“2019-10-03 15:02:32”、“id”:0,“类”:“连接”、“事件”:“连接”,…},……{“时间戳”:“2019-10-03 17:37:26”,“id”:0,“类”:“table_access”、“事件”:“插入”,…}……]

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

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

  • 有些项目出现在每个审计记录中。其他是可选的,可能会根据审计记录类型出现。

  • 不保证审计记录中项目的顺序。

  • 项值不是固定长度的。长值可能会被截断,如后面给出的项描述所示。

  • 而且字符编码为\”而且\ \,分别。

下面的示例显示了不同事件类型的JSON对象格式(由而且事件Items),为了可读性稍微重新格式化:

审计启动事件:

{“时间戳”:“2019-10-03 14:21:56”,“id”:0,“类”:“审计”、“事件”:“创业”、“connection_id”:0,“startup_data”:{“server_id”:1、“os_version”:“i686-Linux”、“mysql_version”:“5.7.21-log”,“参数”:[“/ usr /地方/ mysql / bin / mysqld“,”——loose-audit-log-format = JSON ", "——日志错误=日志。犯错”、“mysqld——pid文件=。Pid ", "——port=3306"]}}

当审计日志插件作为服务器启动的结果启动时(而不是在运行时启用),connection_id设置为0,和账户而且登录不存在。

审计关机事件:

{“时间戳”:“2019-10-03 14:28:20”,“id”:3,“类”:“审计”、“事件”:“关闭”、“connection_id”:0,“shutdown_data”:{“server_id”:1}}

当审计日志插件由于服务器关闭而被卸载时(而不是在运行时禁用),connection_id设置为0,和账户而且登录不存在。

连接或更改用户事件:

{“时间戳”:“2019-10-03 14:23:18”,“id”:1、“类”:“连接”、“事件”:“连接”、“connection_id”:5日“解释”:{“用户”:“根”、“主机”:“localhost”},“登录”:{“用户”:“根”、“操作系统”:“”,“知识产权”:“::1”、“代理 ": "" }, " connection_data”:{“connection_type”:“ssl”,“状态”:0,“分贝”:“测试”、“connection_attributes”:{“_pid”:“43236”,……"program_name": "mysqladmin"}}}

断开事件:

{“时间戳”:“2019-10-03 14:24:45”,“id”:3,“类”:“连接”、“事件”:“脱节”、“connection_id”:5日“解释”:{“用户”:“根”、“主机”:“localhost”},“登录”:{“用户”:“根”、“操作系统”:“”,“知识产权”:“::1”、“代理 ": "" }, " connection_data”:{“connection_type”:“ssl}}

查询事件:

{“时间戳”:“2019-10-03 14:23:35”,“id”:2中,“类”:“将军”,“事件”:“状态”,“connection_id”:5日“解释”:{“用户”:“根”、“主机”:“localhost”},“登录”:{“用户”:“根”、“操作系统”:“”,“知识产权”:“::1”、“代理 ": "" }, " general_data”:{“命令”:“查询”、“sql_command”:“show_variables”、“查询”:“变量”,“状态”:0}}

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

{“时间戳”:“2019-10-03 14:23:41”,“id”:0,“类”:“table_access”、“事件”:“插入”,“connection_id”:5日“解释”:{“用户”:“根”、“主机”:“localhost”},“登录”:{“用户”:“根”、“操作系统”:“”,“知识产权”:“127.0.0.1”、“代理 ": "" }, " table_access_data”:{“分贝”:“测试”,“表”:“t1”、“查询”:“插入t1 (i)值(1),(2),(3)”,“sql_command”:"插入"}}

以下列表中的项出现在json格式审计记录的顶层:每个项的值要么是标量,要么是JSON散列。对于具有哈希值的项,描述只列出该哈希中的项名称。有关二级哈希项的更完整描述,请参阅本节后面的内容。

  • 账户

    与事件关联的MySQL帐户。属性的值是包含这些项的哈希值CURRENT_USER ()部分内的功能:用户宿主

    例子:

    “账户”:{“用户”:“根”、“主机”:“localhost”}
  • 表示事件类的字符串。类定义事件的类型,当与事件项,该项指定事件子类。

    例子:

    “类”:“连接”

    下表显示了允许的组合而且事件值。

    表6.28审计日志分类和事件组合

    类值 允许的事件值
    审计 启动关闭
    连接 连接change_user断开连接
    一般 状态
    table_access_data 删除插入更新

  • connection_data

    客户端连接信息。该值是包含以下项的散列:connection_type状态db,而且可能connection_attributes.项的审计记录才会出现此项的价值连接

    例子:

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

    从MySQL 8.0.19开始,带有的价值连接而且事件的价值连接可能包括connection_attributes项显示客户端在连接时传递的连接属性。(有关这些属性的信息,它们也在性能模式表中公开,请参见connection_attributesValue是一个散列,通过名称和值表示每个属性。

    例子:

    “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
  • 事件

    表示事件类的子类的字符串。类一起使用时,子类定义事件的类型项,该项指定事件类。有关更多信息,请参见项目描述。

    例子:

    “事件”:“连接”
  • general_data

    关于已执行语句或命令的信息。该值是包含以下项的散列:命令sql_command查询状态.项的审计记录才会出现此项的价值一般

    例子:

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

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

    例子:

    “id”: 2

    对于有相同内容的审计记录时间戳值,他们id值区分它们并形成一个序列。在审计日志中,时间戳/id对是唯一的。这些对是标识日志中事件位置的书签。

  • 登录

    指示客户端如何连接到服务器的信息。该值是包含以下项的散列:用户操作系统知识产权代理

    例子:

    “登录”:{“用户”:“根”、“操作系统”:“”,“知识产权”:“::1 ","代理":" "}
  • shutdown_data

    有关审计日志插件终止的信息。该值是包含以下项的散列:server_id此项仅用于审计记录而且事件的值审计而且关闭,分别。

    例子:

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

    与审计日志插件初始化有关的信息。该值是包含以下项的散列:server_idos_versionmysql_versionarg游戏.此项仅用于审计记录而且事件的值审计而且启动,分别。

    例子:

    “startup_data”:{“server_id”:1、“os_version”:“i686-Linux”、“mysql_version”:“5.7.21-log”,“参数”:[“/ usr /地方/ mysql / bin / mysqld“,”——loose-audit-log-format = JSON ", "——日志错误=日志。犯错”、“mysqld——pid文件=。Pid ", "——port=3306"]}
  • table_access_data

    关于访问表的信息。该值是包含以下项的散列:db表格查询sql_command的审计记录,该项只会出现的价值table_access

    例子:

    “table_access_data”:{“分贝”:“测试”,“表”:“t1”、“查询”:“插入t1 (i)值(1),(2),(3)”,“sql_command”:“插入”}
  • 时间戳

    中表示UTC值的字符串YYYY-MM-DD hh: mm: ss表示产生审计事件的日期和时间的格式。例如,从客户端接收到的与执行SQL语句相对应的事件具有时间戳值在语句结束后发生,而不是在收到语句时发生。

    例子:

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

    对于有相同内容的审计记录时间戳值,他们id值区分它们并形成一个序列。在审计日志中,时间戳/id对是唯一的。这些对是标识日志中事件位置的书签。

这些项出现在与json格式审计记录的顶级项相关联的哈希值中: