

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 审计 Amazon RDS for SQL Server 数据库实例
<a name="auditing-rds-sql-instances"></a>

本节提供有关 Amazon RDS 上 SQL Server 审计选项的信息，包括创建审计、查看审计日志以及监控结果。

## 先决条件
<a name="rds-prerequisites"></a>
+ 存储审计文件的 Amazon Simple Storage Service（Amazon S3）存储桶
+ [访问 S3 存储桶](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.Audit.html#Appendix.SQLServer.Options.Audit.IAM)的 AWS Identity and Access Management（IAM）角色
+ 具有 `ALTER ANY SERVER AUDIT` 或 `CONTROL SERVER` 权限的数据库登录

## 支持的版本
<a name="rds-versions"></a>
+ 对于 Amazon RDS for SQL Server 2014，所有版本均支持服务器级审计。企业版还支持数据库级审计。
+ 从 SQL Server 2016 (13.x) SP1 开始，所有版本支持服务器级别和数据库级别审核。
+ Amazon RDS 目前支持除中东（巴林）外的所有 AWS 区域中的 SQL Server 审计。有关最新信息，请参阅 Amazon RDS 文档中的 [SQL Server Audit 支持](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.Audit.html#Appendix.SQLServer.Options.Audit.Support)。

## 使用 C2 审计模式
<a name="rds-c2"></a>

C2 审计模式是 Amazon RDS for SQL Server 数据库参数组中的一个参数。默认情况下它是禁用的。您可以通过将参数值更新为 1 来启用它。启用 C2 审计模式后，它会审计用户登录、存储过程调用以及创建和删除对象等事件。此模式可以生成大量数据，因为其可以审计所有内容或不审计任何内容。

**重要**  
Microsoft 计划在 SQL Server 的未来版本中删除 C2 审计模式。我们建议您避免使用此功能。

## 创建和查看审计
<a name="rds-creating-viewing"></a>

您可以使用内置 SQL Server 审计机制（包括创建审计和审计规范）来审计 Amazon RDS for SQL Server 数据库。 
+ 使用具有访问存储桶必要权限的 IAM 角色，将审计日志上传到 S3 存储桶。 
+ 在创建选项组时，您可以选择 IAM 角色、S3 存储桶、压缩和保留期。最长保留期时间为 35 天。
+ 您可以创建选项组并将其附加到新的或现有的 Amazon RDS for SQL Server 数据库实例。  审计日志存储在 `D:\rdsdbdata\SQLAudit` 中。 
+ SQL Server 完成写入到审计日志文件之后或该文件达到其大小限制时，Amazon RDS 会将文件上传到您的 S3 存储桶。
+ 如果您启用保留，Amazon RDS 会将文件移入位于 `D:\rdsdbdata\SQLAudit\transmitted` 的保留文件夹。在上传审核日志文件之前，审核记录会一直保留在数据库实例上。 
+ 您也可以通过查询 `dbo.rds_fn_get_audit_file` 来查找审计记录。 

对于多可用区实例，数据库审计规范对象将复制到所有节点。  服务器审计和服务器审计规范不会复制到所有节点，因此应手动创建这些对象。

### 配置选项组
<a name="rds-configure-option-group"></a>

按照以下步骤配置选项组，以对您的 Amazon RDS for SQL Server 数据库实例执行 SQL Server 审计。有关详细说明，请参阅 Amazon RDS 文档中的 [SQL Server Audit](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.Audit.html)。
+ 创建选项组。
+ 将 [SQLSERVER\$1AUDIT](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.html) 选项添加到该选项组。
+ 对于 **S3 目标**，创建新存储桶或为审计日志选择现有的存储桶。
+ 对于 **IAM 角色**，创建新角色或选择具有所需策略的现有角色。有关更多信息，请参阅 IAM 文档中的[手动为 SQL Server Audit 创建 IAM 角色](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.Audit.html#Appendix.SQLServer.Options.Audit.IAM)。
+ 展开**其他信息**，然后选择**启用压缩**以压缩审计日志（推荐）。
+ 要保留数据库实例的审计日志，请选择**启用保留**并指定保留期（最长 35 天）。
+ 将选项组应用到新的或现有的 Amazon RDS for SQL Server 数据库实例。
  + 对于新数据库实例，请在启动实例时应用选项组。
  + 对于现有数据库实例，请[修改实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)并附加选项组。

### 创建审核
<a name="rds-create-audit"></a>

要创建服务器审计，请使用以下脚本。此脚本在您指定的文件路径中创建审计文件。有关语法、参数和示例，请参阅 [Microsoft SQL Server 文档](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-server-audit-transact-sql?view=sql-server-ver16)。为避免错误，请查看 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.Audit.html#Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications)中列出的限制列表。

```
--Creating the server audit
 use master
 GO
 CREATE SERVER AUDIT [Audit-<<servername>>]
 TO FILE  ( FILEPATH = N'D:\rdsdbdata\SQLAudit', MAXSIZE = 2 MB, RESERVE_DISK_SPACE = OFF)
 WITH ( QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE)
 GO
-- Enabling the server audit  
 ALTER SERVER AUDIT [Audit-<<servername>>] WITH (STATE = ON) ;
 GO
```

### 创建审核规范
<a name="rds-create-audit-spec"></a>

创建服务器审计后，您可以使用以下代码创建服务器审计规范，以记录服务器级事件。此规范决定在服务器审计期间要检查的内容。有关语法、参数和示例，请参阅 [Microsoft SQL Server 文档](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-server-audit-specification-transact-sql)。以下规范会审计失败的登录操作，并跟踪服务器对象的创建、更改和删除。有关操作列表，请参阅 [Microsoft SQL Server 文档](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions)。

```
--Creating server audit specification
 USE [master]
 GO
 CREATE SERVER AUDIT SPECIFICATION [Audit-Spec-<<servername>>]
 FOR SERVER AUDIT  [Audit-<<servername>>]
 ADD (FAILED_LOGIN_GROUP), ADD (SERVER_OBJECT_CHANGE_GROUP)
 GO
--Enables the audit 
 ALTER SERVER AUDIT [Audit-<<servername>>]  
 WITH (STATE = ON);  
 GO
```

您可以使用以下代码创建记录数据库级事件的数据库审计规范。此示例审计 `INSERT` 操作。有关语法、参数和更多示例，请参阅 [Microsoft SQL Server 文档](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-database-audit-specification-transact-sql)。

```
--Creating database audit specification
 USE [<<DBName>>]
 GO
 
 CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-<<DBName>>]
 FOR SERVER AUDIT [Audit-<<ServerName>>]
 ADD (INSERT ON DATABASE::[<<DBName>>] BY [dbo])
 WITH (STATE = ON)
 GO
```

### 查看审核日志
<a name="rds-view-audit-log"></a>

使用以下查询查看审计日志。审计日志会保留在数据库实例中，直至将其上传到 Amazon S3。如果您为 [SQLSERVER\$1AUDIT](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.html) 选项启用保留，Amazon RDS 会将文件移入保留文件夹 `D:\rdsdbdata\SQLAudit\transmitted`。

您还可以通过将筛选条件更改为 `D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit` 来查看保留文件夹中的审计记录。

```
--Viewing audit logs
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\*.sqlaudit'
	             , default
	             , default )
--Viewing audit logs in retention folder
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit'
	             , default
	             , default )
```

有关审计 SQL Server 数据库的其他选项，请参阅以下 AWS 和 Microsoft 文档：
+ SQL Server 扩展事件：请参阅 AWS 博客文章 [Set up Extended Events in Amazon RDS for SQL Server](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)。
+ SQL Server 触发器：请参阅 Amazon RDS 文档中的[创建对 Amazon RDS 事件触发的规则](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-cloud-watch-events.html)。
+ 更改跟踪：请参阅 Microsoft SQL Server 文档中的 [Track data changes](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server)。
+ 更改数据捕获：请参阅 Amazon RDS 文档中的[使用更改数据捕获](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.CDC.html)。
+ C2 审计模式参数：请参阅 Microsoft SQL Server 文档中的 [c2 audit mode Server Configuration Option](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/c2-audit-mode-server-configuration-option)。

## 监控
<a name="rds-monitoring"></a>

您可以使用 Amazon RDS 中的数据库活动流，将 SQL Server 审计事件与 Imperva、McAfee 和 IBM 的数据库活动监控工具集成。有关更多信息，请参阅 Amazon RDS 文档中的 [Microsoft SQL Server 中的审计](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/DBActivityStreams.Overview.html#DBActivityStreams.Overview.SQLServer-auditing)。