SQL Server 中的透明数据加密支持 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

SQL Server 中的透明数据加密支持

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

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

  • SQL Server 2019 标准版和企业版

  • SQL Server 2017 企业版

  • SQL Server 2016 企业版

  • SQL Server 2014 企业版

  • SQL Server 2012 企业版

适用于 SQL Server 的透明数据加密使用双层密钥体系结构提供加密密钥管理。系统会从数据库主密钥中生成证书,用于保护数据加密密钥。数据库加密密钥对用户数据库上的数据执行实际的加密与解密操作。Amazon RDS 备份和管理数据库主密钥和 TDE 证书。

注意

RDS 不支持导入或导出 TDE 证书。

透明数据加密在您需要加密敏感数据的场景中使用。例如,您可能想要将数据文件和备份提供给第三方,或者想要解决有关安全的合规性问题。您不能加密 SQL Server 的系统数据库,例如 model 数据库或 master 数据库。

注意

您可以创建启用了 TDE 的数据库的本机备份,但无法将这些备份还原到本地数据库。您无法恢复启用 TDE 的本地数据库的本地数据库的本机备份。

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

启用 TDE

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

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

  2. 如果数据库实例未与已启用 TDE 的选项组关联,则您有两个选择。您可以创建选项组并添加 TDE 选项,或您可以修改关联选项组以添加它。

    注意

    在 RDS 控制台中,该选项名为 TRANSPARENT_DATA_ENCRYPTION。在 Amazon CLI 和 RDS API 中,它名为 TDE

    有关创建或者修改选项组的信息,请参阅 使用选项组。有关向选项组添加选项的信息,请参阅 将选项添加到选项组

  3. 将数据库实例与具有 TDE 选项的选项组相关联。有关将数据库实例与选项组关联的信息,请参阅 修改 Amazon RDS 数据库实例

加密数据

将 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,首先应通过解密对象或者删除对象的方式,确保数据库实例上没有留下加密的对象。如果该数据库实例中存在任何加密的对象,则您不能为该数据库实例禁用 TDE。当您使用控制台从选项组中删除 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 选项。