Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Microsoft SQL Server 透明数据加密支持

Amazon RDS 支持使用透明数据加密 (TDE) 来加密运行 Microsoft SQL Server 的数据库实例中存储的数据。TDE 会在数据写入存储前自动加密这些数据,并在从存储中读取时自动解密这些数据。

Amazon RDS 支持在以下 SQL Server 版本中使用 TDE:

  • SQL Server 2017 Enterprise Edition

  • SQL Server 2016 Enterprise Edition

  • SQL Server 2014 Enterprise Edition

  • SQL Server 2012 Enterprise Edition

  • SQL Server 2008 R2 Enterprise Edition

要为运行 SQL Server 的数据库实例启用透明数据加密,请在与该数据库实例关联的 Amazon RDS 选项组中指定 TDE 选项。

适用于 SQL Server 的 Transparent Data Encryption 使用双层密钥体系结构提供加密密钥管理。系统会从数据库主密钥中生成证书,用于保护数据加密密钥。数据库加密密钥对用户数据库上的数据执行实际的加密与解密操作。Amazon RDS 备份并管理数据库主密钥和 TDE 证书。为遵守多种安全标准的规定,Amazon RDS 实施了自动定期主密钥轮换机制。

Transparent Data Encryption 适用于下列情况,即必须加密敏感数据以防止第三方获取这些数据文件和备份,或者需要解决有关安全的合规性问题。注意,无法加密 SQL Server 的系统数据库,例如模型数据库或 Master 数据库。

详细讨论 Transparent Data Encryption 超出了本指南的范围,但您应该了解每个加密算法和密钥的安全优缺点。有关适用于 SQL Server 的透明数据加密的信息,请参阅 Microsoft 网站上的透明数据加密 (TDE)

您应确定数据库实例是否已与具有 TDE 选项的选项组关联。要查看与数据库实例关联的选项组,您可以使用 RDS 控制台、describe-db-instance AWS CLI 命令或 API 操作 DescribeDBInstances

启用 SQL Server 数据库实例上的 Transparent Data Encryption 的流程如下:

  1. 如果数据库实例没有与已启用 TDE 选项的选项组相关联,那么,必须要么创建一个选项组并添加 TDE 选项,要么修改关联的选项组给其添加 TDE 选项。有关创建或者修改选项组的信息,请参阅 使用选项组。有关向选项组添加选项的信息,请参阅 将选项添加到选项组

  2. 将数据库实例与具有 TDE 选项的选项组关联。有关将数据库实例与选项组关联的信息,请参阅 修改运行 Microsoft SQL Server 数据库引擎的数据库实例

TDE 选项添加到选项组后,Amazon RDS 将生成在加密过程中使用的证书。然后,您就可以使用该证书运行各种为数据库实例上的数据库加密数据的 SQL 语句。下例使用 RDS 创建的、名为 RDSTDECertificateName 的证书加密名为 customerDatabase 的数据库。

---------- Enabling TDE ------------- -- Find a RDSTDECertificate to use USE [master] GO SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%' GO USE [customerDatabase] GO -- Create DEK using one of the certificates from the previous step CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName] GO -- Enable encryption on the database ALTER DATABASE [customerDatabase] SET ENCRYPTION ON GO -- Verify that the database is encrypted USE [master] GO SELECT name FROM sys.databases WHERE is_encrypted = 1 GO SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO

使用 TDE 加密 SQL Server 数据库所需的时间取决于多种因素,其中包括数据库实例的大小、是否为实例启用了 PIOPS、数据量和其他因素。

TDE 选项是一个持久性选项,除非所有数据库实例和备份与选项组取消关联,否则无法从该选项组删除该选项。一旦将 TDE 选项添加到选项组,该选项组即只能与使用 TDE 的数据库实例关联。有关选项组中持久性选项的详细信息,请参阅选项组概述

由于 TDE 选项是一个持久性选项,因此,在选项组与关联的数据库实例之间可能发生冲突。在以下情况下,选项组与关联的数据库实例之间可发生冲突:

  • 当前选项组具有 TDE 选项,而您将它替换为没有 TDE 选项的选项组。

  • 从数据库快照还原到不具有包含 TDE 选项的选项组的新数据库实例。有关此方案的更多信息,请参阅选项组注意事项

要禁用数据库实例的 TDE,首先应通过解密对象或者删除对象的方式,确保数据库实例上没有留下加密的对象。如果该数据库实例中存在任何加密的对象,则不允许为该数据库实例禁用 TDE。当您使用 AWS 管理控制台从选项组中删除 TDE 选项时,控制台将指示其正在处理;如果该选项组与加密的数据库实例或数据库快照关联,则将创建一个事件以指示存在错误。

下例从名为 customerDatabase 的数据库中删除 TDE 加密。

------------- Removing TDE ---------------- USE [customerDatabase] GO -- Disable encryption on the database ALTER DATABASE [customerDatabase] SET ENCRYPTION OFF GO -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO -- Drop the DEK used for encryption DROP DATABASE ENCRYPTION KEY GO -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated USE [master] GO ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE GO

将所有对象取消加密后,您可以修改数据库实例,使其与没有 TDE 选项的选项组关联,或者可从选项组中删除 TDE 选项。

性能注意事项

SQL Server 数据库实例的性能可能会因为使用 Transparent Data Encryption 而受到影响。

如果数据库实例上的数据库拥有至少一个加密的数据库,那么,也可能会降低未加密数据库的性能。因此,我们建议您将加密数据库和未加密数据库保存在不同的数据库实例上。

因加密的特性所致,加密数据库的大小和事务日志的大小大于未加密的数据库的对应大小。可超限分配免费备份空间。TDE 的性质将不可避免地使性能下降。如果需要高性能和 TDE,则要衡量影响并确保其满足您的需要。如果使用预置的 IOPS 和至少为 M3.Large 规模的数据库实例类,则对性能的影响较小。

本页内容: