数据库活动流的 databaseActivityEventList JSON 数组 - Amazon Aurora

数据库活动流的 databaseActivityEventList JSON 数组

审核日志负载是解密的 databaseActivityEventList JSON 数组。以下表列表按字母顺序列出了审计日志的解密 DatabaseActivityEventList 数组中每个活动事件的字段。这些字段会因您使用的是 Aurora PostgreSQL 还是 Aurora MySQL 而有所不同。请参阅适用于您的数据库引擎的表。

重要

事件结构可能会发生变化。Aurora 可能会将新字段添加到未来的活动事件中。在解析 JSON 数据的应用程序中,请确保您的代码可以忽略未知字段名称或对其采取适当操作。

Aurora PostgreSQL 的 databaseActivityEventList 字段

以下是 Aurora PostgreSQL 的 databaseActivityEventList 字段。

字段 数据类型 描述
class 字符串

活动事件的类。Aurora PostgreSQL 的有效值如下所示:

  • ALL

  • CONNECT – 连接或断开连接事件。

  • DDL – 未包含在 ROLE 类的语句列表中的 DDL 语句。

  • FUNCTION – 函数调用或 DO 块。

  • MISC – 其他命令,例如 DISCARDFETCHCHECKPOINTVACUUM

  • NONE

  • READSELECTCOPY 语句(当源为关系或查询时)。

  • ROLE – 与角色或权限关联的语句,包括 GRANTREVOKECREATE/ALTER/DROP ROLE

  • WRITEINSERTUPDATEDELETETRUNCATECOPY 语句(当目标为关系时)。

clientApplication 字符串 客户端报告的其用于连接的应用程序。由于客户端不必提供此信息,因此值可以为 null。
command 字符串 不带任何命令详细信息的 SQL 命令的名称。
commandText 字符串

用户传入的实际 SQL 语句。对于 Aurora PostgreSQL,该值与原始 SQL 语句相同。此字段用于除连接或断开连接记录之外的所有类型的记录,在这种情况下,该值为 null。

重要

每个语句的完整 SQL 文本在活动流审核日志中可见,包括任何敏感数据。但是,如果 Aurora 可以从上下文中确定数据库用户密码,则会对该密码进行修订,如下面的 SQL 语句所示。

ALTER ROLE role-name WITH password
databaseName 字符串 用户连接到的数据库。
dbProtocol 字符串 数据库协议,例如 Postgres 3.0
dbUserName 字符串 客户端对其进行身份验证的数据库用户。
errorMessage

(仅版本 1.1 数据库活动记录)

字符串

如果出现任何错误,则使用数据库服务器生成的错误消息填充此字段。对于未导致错误的普通语句,errorMessage 值为 null。

错误定义为生成客户端可见 PostgreSQL 错误日志事件(其严重性级别为 ERROR 或更高)的任何活动。有关更多信息,请参阅 PostgreSQL 消息严重性级别。例如,语法错误和查询取消会生成错误消息。

内部 PostgreSQL 服务器错误(例如后台检查指针进程错误)不会生成错误消息。但是,无论如何设置日志严重性级别,此类事件的记录仍会发出。这样可防止攻击者关闭日志记录以尝试避开检测。

另请参阅 exitCode 字段。

exitCode int 用于会话退出记录的值。在干净的出口,这包含退出代码。在某些故障场景中,无法始终获得退出代码。例如,如果 PostgreSQL 执行 exit() 或操作者执行 kill -9 等命令。

如果存在任何错误,则 exitCode 字段将显示 SQL 错误代码 SQLSTATE,如 PostgreSQL 错误代码中所列。

另请参阅 errorMessage 字段。

logTime 字符串 审核代码路径中记录的时间戳。这表示 SQL 语句执行结束时间。另请参阅 startTime 字段。
netProtocol 字符串 网络通信协议。
objectName 字符串 数据库对象的名称(如果正在对一个数据库对象运行 SQL 语句)。此字段仅在对数据库对象运行 SQL 语句时使用。如果未对一个对象运行 SQL 语句,则此值为 null。
objectType 字符串 数据库对象类型,例如表、索引、视图等。此字段仅在对数据库对象运行 SQL 语句时使用。如果未对一个对象运行 SQL 语句,则此值为 null。包括下列有效值:
  • COMPOSITE TYPE

  • FOREIGN TABLE

  • FUNCTION

  • INDEX

  • MATERIALIZED VIEW

  • SEQUENCE

  • TABLE

  • TOAST TABLE

  • VIEW

  • UNKNOWN

paramList 字符串 传递给 SQL 语句的逗号分隔的参数数组。如果 SQL 语句没有参数,则此值为空数组。
pid int 为向客户端连接提供服务而分配的后端进程的进程 ID。
remoteHost 字符串 客户端 IP 地址或主机名。对于 Aurora PostgreSQL,使用哪一个取决于数据库的 log_hostname 参数设置。remoteHost 值还包括指示活动来自 rdsadmin 用户的 [local]localhost
remotePort 字符串 客户端的端口号。
rowCount int SQL 语句返回的行数。例如,如果 SELECT 语句返回 10 行,则 rowCount 为 10。对于 INSERT 或 UPDATE 语句,则 rowCount 为 0。
serverHost 字符串 数据库服务器主机 IP 地址。serverHost 值还包括指示活动来自 rdsadmin 用户的 [local]localhost
serverType 字符串 数据库服务器类型,例如 PostgreSQL
serverVersion 字符串 数据库服务器版本,例如对于 Aurora PostgreSQL 为 2.3.1
serviceName 字符串 服务名称,例如 Amazon Aurora PostgreSQL-Compatible edition
sessionId int 伪唯一会话标识符。
sessionId int 伪唯一会话标识符。
startTime

(仅版本 1.1 数据库活动记录)

字符串

SQL 语句开始执行的时间。

要计算 SQL 语句的近似执行时间,请使用 logTime - startTime。另请参阅 logTime 字段。

statementId int 客户端的 SQL 语句的标识符。计数器处于会话级别,并随客户端输入的每个 SQL 语句递增。
substatementId int SQL 子语句的标识符。此值计算 statementId 字段标识的每个 SQL 语句的包含的子语句。
type 字符串 事件类型。有效值为 recordheartbeat

Aurora MySQL 的 databaseActivityEventList 字段

以下是 Aurora MySQL 的 databaseActivityEventList 字段。

字段 数据类型 描述
class 字符串

活动事件的类。

Aurora MySQL 的有效值如下所示:

  • MAIN – 表示 SQL 语句的主事件。

  • AUX – 包含其他详细信息的补充事件。例如,重命名对象的语句可能具有反映新名称的类为 AUX 的事件。

    要查找对应于同一语句的 MAINAUX 事件,请检查具有相同的 pid 字段值和 statementId 字段值的不同事件。

clientApplication 字符串 客户端报告的其用于连接的应用程序。由于客户端不必提供此信息,因此值可以为 null。
command 字符串

SQL 语句的常规类别。此字段的值取决于 class 的值。

classMAIN 时的值包括以下值:

  • CONNECT – 连接客户端会话时。

  • QUERY – SQL 语句。附带一个或多个 class 值为 AUX 的事件。

  • DISCONNECT – 客户端会话断开连接时。

  • FAILED_CONNECT – 客户端尝试连接但无法连接时。

  • CHANGEUSER – 属于 MySQL 网络协议的一部分但不是来自您发出的语句的状态更改。

classAUX 时的值包括以下值:

  • READSELECTCOPY 语句(当源为关系或查询时)。

  • WRITEINSERTUPDATEDELETETRUNCATECOPY 语句(当目标为关系时)。

  • DROP – 删除对象。

  • CREATE – 创建对象。

  • RENAME – 重命名对象。

  • ALTER – 更改对象的属性。

commandText 字符串

对于 class 值为 MAIN 的事件,此字段表示用户传入的实际 SQL 语句。此字段用于除连接或断开连接记录之外的所有类型的记录,在这种情况下,该值为 null。

对于 class 值为 AUX 的事件,此字段包含有关事件中涉及的对象的补充信息。

对于 Aurora MySQL,字符(如引号)前面有反斜杠,表示转义字符。

重要

每个语句的完整 SQL 文本在审核日志中可见,包括任何敏感数据。但是,如果 Aurora 可以从上下文中确定数据库用户密码,则会对该密码进行修订,如下面的 SQL 语句所示。

mysql> SET PASSWORD = 'my-password';
注意

作为安全最佳实践,请指定除此处所示提示以外的密码。

databaseName 字符串 用户连接到的数据库。
dbProtocol 字符串 数据库协议。目前,对于 Aurora MySQL,此值始终为 MySQL
dbUserName 字符串 客户端对其进行身份验证的数据库用户。
endTime

(仅版本 1.2 数据库活动记录)

字符串

SQL 语句执行结束的时间。它以协调世界时 (UTC) 格式表示。

要计算 SQL 语句的执行时间,请使用 endTime - startTime。另请参阅 startTime 字段。

errorMessage

(仅版本 1.1 数据库活动记录)

字符串

如果出现任何错误,则使用数据库服务器生成的错误消息填充此字段。对于未导致错误的普通语句,errorMessage 值为 null。

错误定义为生成客户端可见 MySQL 错误日志事件(其严重性级别为 ERROR 或更高)的任何活动。有关更多信息,请参阅 MySQL 参考手册中的错误日志。例如,语法错误和查询取消会生成错误消息。

内部 MySQL 服务器错误(例如后台检查指针进程错误)不会生成错误消息。但是,无论如何设置日志严重性级别,此类事件的记录仍会发出。这样可防止攻击者关闭日志记录以尝试避开检测。

另请参阅 exitCode 字段。

exitCode int 用于会话退出记录的值。在干净的出口,这包含退出代码。在某些故障场景中,无法始终获得退出代码。在此类情况下,此值可能为零,也可能为空。
logTime 字符串 审核代码路径中记录的时间戳。它以协调世界时 (UTC) 格式表示。有关计算语句持续时间的最准确方法,请参阅 startTimeendTime 字段。
netProtocol 字符串 网络通信协议。目前,对于 Aurora MySQL,此值始终为 TCP
objectName 字符串 数据库对象的名称(如果正在对一个数据库对象运行 SQL 语句)。此字段仅在对数据库对象运行 SQL 语句时使用。如果未对一个对象运行 SQL 语句,则此值为空。要构造对象的完全限定名称,请将 databaseNameobjectName 组合起来。如果查询涉及多个对象,则此字段可以是名称的逗号分隔列表。
objectType 字符串

数据库对象类型,例如表、索引等。此字段仅在对数据库对象运行 SQL 语句时使用。如果未对一个对象运行 SQL 语句,则此值为 null。

Aurora MySQL 的有效值包括:

  • INDEX

  • TABLE

  • UNKNOWN

paramList 字符串 此字段不用于 Aurora MySQL 且始终为 null。
pid int 为向客户端连接提供服务而分配的后端进程的进程 ID。当数据库服务器重新启动时,pid 会发生更改,并且 statementId 字段的计数器会重新开始。
remoteHost 字符串 发出 SQL 语句的客户端的 IP 地址或主机名。对于 Aurora MySQL,使用哪一个取决于数据库的 skip_name_resolve 参数设置。值 localhost 指示来自 rdsadmin 特殊用户的活动。
remotePort 字符串 客户端的端口号。
rowCount int SQL 语句所影响或检索的表行的数目。此字段仅用于作为数据操作语言 (DML) 语句的 SQL 语句。如果 SQL 语句不是 DML 语句,则此值为 null。
serverHost 字符串 数据库服务器实例标识符。
serverType 字符串 数据库服务器类型,例如 MySQL
serverVersion 字符串 数据库服务器版本。目前,对于 Aurora MySQL,此值始终为 MySQL 5.7.12
serviceName 字符串 服务的名称。目前,对于 Aurora MySQL,此值始终为 Amazon Aurora MySQL
sessionId int 伪唯一会话标识符。
startTime

(仅版本 1.1 数据库活动记录)

字符串

SQL 语句开始执行的时间。它以协调世界时 (UTC) 格式表示。

要计算 SQL 语句的执行时间,请使用 endTime - startTime。另请参阅 endTime 字段。

statementId int 客户端的 SQL 语句的标识符。计数器随客户端输入的每个 SQL 语句递增。在重新启动数据库实例时,将重置计数器。
substatementId int SQL 子语句的标识符。对于类为 MAIN 的事件,此值为 1;对于类为 AUX 的事件,此值为 2。使用 statementId 字段标识同一语句生成的所有事件。
transactionId

(仅版本 1.2 数据库活动记录)

int 事务的标识符。
type 字符串 事件类型。有效值为 recordheartbeat