

# 备份和还原本地数据库的 TDE 证书
<a name="TDE.BackupRestoreOnPrem"></a>

您可以备份本地数据库的 TDE 证书，然后将其还原到 RDS for SQL Server。您还可以将 RDS for SQL Server TDE 证书还原到本地数据库实例。

**注意**  
RDS for SQL Server 不支持在 TDE 中使用跨账户密钥。

以下过程备份 TDE 证书和私有密钥。私有密钥使用从对称加密 KMS 密钥生成的数据密钥进行加密。

**备份本地 TDE 证书**

1. 使用 AWS CLI 命令 [generate-data-key](https://docs.aws.amazon.com/cli/latest/reference/kms/generate-data-key.html) 生成数据密钥。

   ```
   aws kms generate-data-key \
       --key-id my_KMS_key_ID \
       --key-spec AES_256
   ```

   输出与以下内容类似。

   ```
   {
   "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
   BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
   2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==",
   "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=",
   "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33"
   }
   ```

   您可以在下一步中使用纯文本输出作为私有密钥密码。

1. 备份 TDE 证书，如以下示例所示。

   ```
   BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (
   FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk',
   ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
   ```

1. 将证书备份文件保存到 Amazon S3 证书桶。

1. 将私有密钥备份文件保存到 S3 证书桶，并在文件的元数据中使用以下标签：
   + 密钥 – `x-amz-meta-rds-tde-pwd`
   + 值 – `CiphertextBlob` 值来自生成数据密钥过程，如以下示例所示。

     ```
     AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
     BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
     2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==
     ```

以下过程将 RDS for SQL Server TDE 证书还原到本地数据库实例。您可以使用证书备份、相应的私有密钥文件和数据密钥在目标数据库实例上复制和还原 TDE 证书。还原的证书由新服务器的数据库主密钥加密。

**还原 TDE 证书**

1. 将 TDE 证书备份文件和私有密钥文件从 Amazon S3 复制到目标实例。有关从 Amazon S3 中复制文件的更多信息，请参阅[在 RDS for SQL Server 和 Amazon S3 之间传输文件](Appendix.SQLServer.Options.S3-integration.using.md)。

1. 使用 KMS 密钥解密输出密码文本，以检索数据密钥的纯文本。密码文本位于私有密钥备份文件的 S3 元数据中。

   ```
   aws kms decrypt \
       --key-id my_KMS_key_ID \
       --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \
       --output text \
       --query Plaintext
   ```

   您可以在下一步中使用纯文本输出作为私有密钥密码。

1. 使用以下 SQL 命令还原 TDE 证书。

   ```
   CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk',
   DECRYPTION BY PASSWORD = 'plain_text_output');
   ```

有关 KMS 解密的更多信息，请参阅《AWS CLI 命令参考》**的 KMS 部分中的[解密](https://docs.aws.amazon.com/cli/latest/reference/kms/decrypt.html)。

在目标数据库实例上还原 TDE 证书后，您可以使用该证书还原加密的数据库。

**注意**  
您可以使用同一 TDE 证书对源数据库实例上的多个 SQL Server 数据库进行加密。要将多个数据库迁移到目标实例，请将与它们关联的 TDE 证书仅复制到目标实例（仅限一次）。