

# 在 Amazon Aurora MySQL 数据库集群中使用高级审计
<a name="AuroraMySQL.Auditing"></a><a name="auditing"></a><a name="advanced_auditing"></a>

您可以在 Amazon Aurora MySQL 中使用高性能的高级审核功能来审核数据库活动。要启用该功能，您可以通过设置多个数据库集群参数来启用审核日志的收集。在启用了高级审核时，您可以用它来记录任意支持事件的组合。

 通过查看或下载审计日志，您可以一次查看一个数据库实例的审计信息。为此，您可以使用 [监控 Amazon Aurora 日志文件](USER_LogAccess.md) 中的过程。

**提示**  
 对于包含多个数据库实例的 Aurora 数据库集群，您会发现检查集群中所有实例的审计日志更方便。为此，您可以使用 CloudWatch Logs。您可以启用集群级别的设置，将 Aurora MySQL 审计日志数据发布到 CloudWatch 中的日志组。然后，通过 CloudWatch 界面查看、筛选和搜索审计日志。有关更多信息，请参阅 [将 Amazon Aurora MySQL 日志发布到 Amazon CloudWatch Logs](AuroraMySQL.Integrating.CloudWatch.md)。

## 启用高级审核
<a name="AuroraMySQL.Auditing.Enable"></a>

可以使用本节中介绍的参数为数据库集群启用和配置高级审核。

使用 `server_audit_logging` 参数启用或禁用高级审计。

使用 `server_audit_events` 参数指定要记录的事件。

使用 `server_audit_incl_users` 和 `server_audit_excl_users` 参数来指定审核的对象。默认情况下会审计所有用户。有关一个或两个参数留空或者两者均指定相同用户名时这些参数工作方式的详细信息，请参阅 [server\$1audit\$1incl\$1users](#AuroraMySQL.Auditing.Enable.server_audit_incl_users) 和 [server\$1audit\$1excl\$1users](#AuroraMySQL.Auditing.Enable.server_audit_excl_users)。

通过在数据库集群使用的参数组中设置这些参数来配置高级审核。您可以使用[在 Amazon Aurora 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)中所示的过程，通过 AWS 管理控制台来修改数据库集群参数。您可以使用 [modify-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster-parameter-group.html) AWS CLI 命令或 [ModifyDBClusterParameterGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html) Amazon RDS API 操作，以编程方式修改数据库集群参数。

如果参数组已与集群关联，无需重新启动数据库集群即可修改这些参数。首次将参数组与集群关联时，需要重新启动集群。

**Topics**
+ [server\$1audit\$1logging](#AuroraMySQL.Auditing.Enable.server_audit_logging)
+ [server\$1audit\$1events](#AuroraMySQL.Auditing.Enable.server_audit_events)
+ [server\$1audit\$1incl\$1users](#AuroraMySQL.Auditing.Enable.server_audit_incl_users)
+ [server\$1audit\$1excl\$1users](#AuroraMySQL.Auditing.Enable.server_audit_excl_users)

### server\$1audit\$1logging
<a name="AuroraMySQL.Auditing.Enable.server_audit_logging"></a>

启用或禁用高级审核。该参数默认为 OFF；将其设置为 ON 可启用高级审核。

 日志不会显示审计数据，除非您还使用 `server_audit_events` 参数对要审计的一种或多种类型的事件进行定义。

 若要确认数据库实例的审计数据是否已记录，请检查该实例的某些日志文件的名称格式是否为 `audit/audit.log.other_identifying_information`。要查看日志文件的名称，请按照 [查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md) 中的过程执行操作。

### server\$1audit\$1events
<a name="AuroraMySQL.Auditing.Enable.server_audit_events"></a>

包含要记录的事件列表，以逗号分隔。事件必须以全大写形式指定，列表元素之间不应有空格，例如：`CONNECT,QUERY_DDL`。该参数默认为空字符串。

您可以记录以下事件的任意组合：
+ CONNECT – 记录成功和失败的连接以及断开连接。此事件包括用户信息。
+ QUERY – 以纯文本记录所有查询，包括由于语法或权限错误而失败的查询。
**提示**  
 启用此事件类型后，审计数据将包括有关 Aurora 自动执行的持续监控与运行状况检查信息的信息。如果只对特定类型的操作感兴趣，可以使用更具体的事件类型。您还可以使用 CloudWatch 界面，在日志中搜索与特定数据库、表或用户相关的事件。
+ QUERY\$1DCL – 类似于 QUERY 事件，不过仅返回数据控制语言 (DCL) 查询 (GRANT、REVOKE 等)。
+ QUERY\$1DDL – 类似于 QUERY 事件，不过仅返回数据定义语言 (DDL) 查询 (CREATE、ALTER 等)。
+ QUERY\$1DML – 类似于 QUERY 事件，但仅返回数据操作语言 (DML) 查询（INSERT、UPDATE 等，也包括 SELECT）。
+ TABLE – 记录受查询执行影响的表。

**注意**  
Aurora 中没有任何筛选条件可将某些查询排除在审计日志之外。要排除 `SELECT` 查询，您必须排除所有 DML 语句。  
如果某个用户在审计日志中报告了这些内部 `SELECT` 查询，您可以通过设置 [server\$1audit\$1excl\$1users](#AuroraMySQL.Auditing.Enable.server_audit_excl_users) 数据库集群参数来排除该用户。但是，如果该用户也在其他活动中使用并且不能省略，则没有其他选项可以排除 `SELECT` 查询。

### server\$1audit\$1incl\$1users
<a name="AuroraMySQL.Auditing.Enable.server_audit_incl_users"></a>

包含已记录其活动的用户的用户名列表，以逗号分隔。列表元素之间不应有空格，例如：`user_3,user_4`。该参数默认为空字符串。最大长度为 1024 个字符。指定用户名必须与 `User` 表的 `mysql.user` 列中的对应值匹配。有关用户名的更多信息，请参阅 MySQL 文档中的[账户用户名和密码](https://dev.mysql.com/doc/refman/8.0/en/user-names.html)。

 如果 `server_audit_incl_users` 和 `server_audit_excl_users` 均为空（默认），则审计所有用户。

 如果您将用户添加到 `server_audit_incl_users` 并将 `server_audit_excl_users` 留空，则只审核这些用户。

 如果将用户添加到 `server_audit_excl_users` 并将 `server_audit_incl_users` 留空，会对所有用户进行审计，但 `server_audit_excl_users` 中列出的用户除外。

 如果将同一用户同时添加到 `server_audit_excl_users` 和 `server_audit_incl_users`，则会审计这些用户。如果两个设置中均列出同一用户，`server_audit_incl_users` 获得的优先级更高。

Connect 和 disconnect 事件不受此变量的影响；只要指定就始终记录这些事件。即使在 `server_audit_excl_users` 参数中也指定了某个用户，由于 `server_audit_incl_users` 具有更高的优先级，仍会记录该用户。

### server\$1audit\$1excl\$1users
<a name="AuroraMySQL.Auditing.Enable.server_audit_excl_users"></a>

包含未记录其活动的用户的用户名列表，以逗号分隔。列表元素之间不应有空格，例如：`rdsadmin,user_1,user_2`。该参数默认为空字符串。最大长度为 1024 个字符。指定用户名必须与 `User` 表的 `mysql.user` 列中的对应值匹配。有关用户名的更多信息，请参阅 MySQL 文档中的[账户用户名和密码](https://dev.mysql.com/doc/refman/8.0/en/user-names.html)。

 如果 `server_audit_incl_users` 和 `server_audit_excl_users` 均为空（默认），则审计所有用户。

 如果将用户添加到 `server_audit_excl_users` 并将 `server_audit_incl_users` 留空，则除在 `server_audit_excl_users` 中列出的那些用户外，其他所有用户均会被审计。

 如果将同一用户同时添加到 `server_audit_excl_users` 和 `server_audit_incl_users`，则会审计这些用户。如果两个设置中均列出同一用户，`server_audit_incl_users` 获得的优先级更高。

Connect 和 disconnect 事件不受此变量的影响；只要指定就始终记录这些事件。如果在 `server_audit_incl_users` 参数中也指定了某个用户，由于该设置的优先级高于 `server_audit_excl_users`，则记录该用户。

## 查看审核日志
<a name="AuroraMySQL.Auditing.View"></a>

 您可以使用控制台查看并下载审核日志。在 **Databases (数据库)** 页面上，选择该数据库实例以显示其详细信息，然后滚动到 **Logs (日志)** 部分。高级审计功能生成的审计日志的名称格式为 `audit/audit.log.other_identifying_information`。

要下载日志文件，请在 **Logs (日志)** 部分选择该文件并选择 **Download (下载)**。

您还可以使用 [describe-db-log-files](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-log-files.html) AWS CLI 命令获取日志文件列表。您可以使用 [download-db-log-file-portion](https://docs.aws.amazon.com/cli/latest/reference/rds/download-db-log-file-portion.html) AWS CLI 命令下载日志文件内容。有关更多信息，请参阅“[查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)”和“[下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)”。

## 审计日志详细信息
<a name="AuroraMySQL.Auditing.Logs"></a>

日志文件表示为 UTF-8 格式的逗号分隔变量 (CSV) 文件。查询也用单引号（'）引起来。

审计日志单独存储在每个 Aurora MySQL 数据库实例的本地存储中。每个实例一次将写入分布在四个日志文件中。日志文件的最大大小为 100 MB。当达到这个不可配置的限制时，Aurora 将轮换文件并生成一个新文件。

**提示**  
日志文件条目不按先后顺序排列。要对条目进行排序，请使用时间戳值。要查看最新事件，您可能需要查看所有日志文件。为了更加灵活地对日志数据进行排序和搜索，请启用设置将审计日志上传到 CloudWatch，再使用 CloudWatch 界面进行查看。  
 若要查看包含更多字段类型和 JSON 格式输出的审计数据，还可以使用数据库活动流功能。有关更多信息，请参阅 [使用数据库活动流监控 Amazon Aurora](DBActivityStreams.md)。

审核日志文件的各行按照指定顺序包含以下逗号分隔的信息：


| 字段 | 描述 | 
| --- | --- | 
|  timestamp  |  所记录事件的 Unix 时间戳，精度为微秒。  | 
|  serverhost  |  记录了其事件的实例的名称。  | 
|  username  |  已连接用户的用户名。  | 
|  host  |  用户发起连接时所在的主机。  | 
|  connectionid  |  所记录操作的连接 ID 号。  | 
|  queryid  |  查询 ID 号，可用于查找关系表事件和相关查询。对于 `TABLE` 事件，添加多行。  | 
|  operation  |  记录的操作类型。可能值为：`CONNECT`、`QUERY`、`READ`、`WRITE`、`CREATE`、`ALTER`、`RENAME` 和 `DROP`。  | 
|  database  |  活动数据库，由 `USE` 命令设置。  | 
|  object  |  对于 `QUERY` 事件，此值指示数据库执行的查询。对于 `TABLE` 事件，它指示表名。  | 
|  retcode  |  所记录操作的返回代码。  | 