

# MySQL 的 MariaDB 审计插件支持
<a name="Appendix.MySQL.Options.AuditPlugin"></a>

Amazon RDS 基于开源 MariaDB 审计插件为 MySQL 数据库实例提供审计插件。有关更多信息，请参阅 [MySQL Server GitHub 存储库的审计插件](https://github.com/aws/audit-plugin-for-mysql)。

**注意**  
MySQL 的审计插件基于 MariaDB 审计插件。在本文中，我们将其称为 MariaDB 审计插件。

MariaDB 审计插件记录数据库活动，包括用户登录数据库和针对数据库运行的查询等。数据库活动记录存储在日志文件中。

## 审计插件选项设置
<a name="Appendix.MySQL.Options.AuditPlugin.Options"></a>

Amazon RDS 支持 MariaDB 审计插件选项的以下设置。


| 选项设置 | 有效值 | 默认值 | 描述 | 
| --- | --- | --- | --- | 
| `SERVER_AUDIT_FILE_PATH` | `/rdsdbdata/log/audit/` | `/rdsdbdata/log/audit/` |  日志文件的位置。日志文件包含 `SERVER_AUDIT_EVENTS` 中指定的活动记录。有关更多信息，请参阅“[查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)”和“[MySQL 数据库日志文件](USER_LogAccess.Concepts.MySQL.md)”。  | 
| `SERVER_AUDIT_FILE_ROTATE_SIZE` | 1–1000000000 | 1000000 |  达到该字节大小时，会导致文件轮换。有关更多信息，请参阅“[RDS for MySQL 数据库日志概览](USER_LogAccess.MySQL.LogFileSize.md)”。  | 
| `SERVER_AUDIT_FILE_ROTATIONS` | 0–100 | 9 |  当 `server_audit_output_type=file` 时要保存的日志轮换数量。如果设置为 0，则日志文件从不轮换。有关更多信息，请参阅“[RDS for MySQL 数据库日志概览](USER_LogAccess.MySQL.LogFileSize.md)”和“[下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)”。  | 
| `SERVER_AUDIT_EVENTS` | `CONNECT`, `QUERY`, `QUERY_DDL`, `QUERY_DML`, `QUERY_DML_NO_SELECT`, `QUERY_DCL` | `CONNECT`, `QUERY` |  要在日志中记录的活动类型。安装 MariaDB 审核插件可自行登录。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html) MySQL 不支持 `TABLE`。  | 
| `SERVER_AUDIT_INCL_USERS` | 多个逗号分隔值 | 无 |  仅包括指定用户的活动。默认情况下，会记录所有用户的活动。`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` 中添加任何值。  `rdsadmin` 用户会每秒查询一次数据库，以检查数据库的运行状况。根据您的其他设置，此活动可能导致您的日志文件大小非常快速地增长。如果您不需要记录此活动，请将 `rdsadmin` 用户添加到 `SERVER_AUDIT_EXCL_USERS` 列表。   `CONNECT`会始终为所有用户记录 活动，即使是该选项设置指定的用户。   | 
| `SERVER_AUDIT_LOGGING` | `ON` | `ON` |  日志记录处于活动状态。唯一有效值为 `ON`。Amazon RDS 不支持停用日志记录。如果您要停用日志记录，请删除 MariaDB 审核插件。有关更多信息，请参阅“[删除 MariaDB 审核插件](#Appendix.MySQL.Options.AuditPlugin.Remove)”。  | 
| `SERVER_AUDIT_QUERY_LOG_LIMIT` | 0–2147483647 | 1024 |  记录中查询字符串的长度限制。  | 

## 添加 MariaDB 审核插件
<a name="Appendix.MySQL.Options.AuditPlugin.Add"></a>

向数据库实例添加 MariaDB 审核插件的一般过程如下：
+ 创建新的选项组，或者复制或修改现有选项组
+ 向选项组添加选项
+ 将选项组与数据库实例相关联

添加 MariaDB 审核插件后，您无需重新启动数据库实例。一旦选项组处于活动状态，审核便会立即开始。

**重要**  
将 MariaDB 审计插件添加到数据库实例可能会导致中断。我们建议在维护时段或数据库工作负载较低时添加 MariaDB 审计插件。

**添加 MariaDB 审核插件**

1. 确定您想要使用的选项组。您可以创建新的选项组，或使用现有选项组。如果您想使用现有选项组，请跳到下一步。否则，请创建自定义数据库选项组。为**引擎**选择 **mysql**，并为**主引擎版本**选择 **5.7**、**8.0** 或 **8.4**。有关更多信息，请参阅 [创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 将 **MARIADB\$1AUDIT\$1PLUGIN** 选项添加到选项组中，然后配置选项设置。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。有关各项设置的更多信息，请参阅[审计插件选项设置](#Appendix.MySQL.Options.AuditPlugin.Options)。

1. 将选项组应用到新的或现有的数据库实例。
   + 对于新数据库实例，您可以在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，您可以通过修改实例并附加新的选项组来应用选项组。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

## 审计日志格式
<a name="Appendix.MySQL.Options.AuditPlugin.LogFormat"></a>

日志文件表示为 UTF-8 格式的逗号分隔变量 (CSV) 文件。

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

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


| 字段 | 描述 | 
| --- | --- | 
|  timestamp  |  所记录的事件的 `YYYYMMDD` 后跟 `HH:MI:SS`（24 小时制）。  | 
|  serverhost  |  记录了其事件的实例的名称。  | 
|  username  |  已连接用户的用户名。  | 
|  host  |  用户发起连接时所在的主机。  | 
|  connectionid  |  所记录操作的连接 ID 号。  | 
|  queryid  |  查询 ID 号，可用于查找关系表事件和相关查询。对于 `TABLE` 事件，添加多行。  | 
|  operation  |  记录的操作类型。可能值为：`CONNECT`、`QUERY`、`READ`、`WRITE`、`CREATE`、`ALTER`、`RENAME` 和 `DROP`。  | 
|  database  |  活动数据库，由 `USE` 命令设置。  | 
|  object  |  对于 `QUERY` 事件，此值指示数据库执行的查询。对于 `TABLE` 事件，它指示表名。  | 
|  retcode  |  所记录操作的返回代码。  | 
|  connection\$1type  |  与服务器的连接的安全状态。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html)  | 

## 查看和下载 MariaDB 审计插件日志
<a name="Appendix.MySQL.Options.AuditPlugin.Log"></a>

启用 MariaDB 审计插件后，您将以访问其他任何基于文本的日志文件的相同方式来访问日志文件中的结果。审计日志文件位于 `/rdsdbdata/log/audit/`。有关在控制台中查看日志文件的信息，请参阅 [查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)。有关下载日志文件的信息，请参阅 [下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)。

## 修改 MariaDB 审计插件设置
<a name="Appendix.MySQL.Options.AuditPlugin.ModifySettings"></a>

启用 MariaDB 审计插件后，您可以修改各项设置。有关如何修改选项设置的更多信息，请参阅 [修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。有关各项设置的更多信息，请参阅[审计插件选项设置](#Appendix.MySQL.Options.AuditPlugin.Options)。

## 删除 MariaDB 审核插件
<a name="Appendix.MySQL.Options.AuditPlugin.Remove"></a>

Amazon RDS 不支持关闭 MariaDB 审核插件中的日志记录。不过，您可以从数据库实例删除插件。在删除 MariaDB 审核插件时，将自动重新启动数据库实例以停止审核。

要从数据库实例中删除 MariaDB 审核插件，请执行以下操作之一：
+ 从 MariaDB 审核插件选项所属的选项组中删除 MariaDB 审核插件选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)” 
+ 修改数据库实例，并指定不包含插件的其他选项组。此更改会影响单个数据库实例。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。