如何从本地环境还原 RDS for SQL Server 中的加密备份文件或加密的 Microsoft Azure 备份?
我想在本地环境和适用于 Microsoft SQL Server 实例的 Amazon Relational Database Service(Amazon RDS)之间还原加密备份文件或加密的 Microsoft Azure 备份。如何使用本机备份和还原功能来完成这项操作?
简短描述
SQL Server 2014(12.x)及更高版本中提供备份加密功能。创建备份时,您可以指定加密算法和加密器(证书或非对称密钥)。这将创建一个加密的备份文件。
**注意:**此功能与 TDE 加密不同。
解决方法
加密备份
**注意:**在开始执行以下解决步骤之前,请确保您已经创建了以下资源:
- 一个 Amazon Simple Storage Service(Amazon S3)桶。
- 一个在选项组中配置了 TDE 和 SQLSERVER_BACKUP_RESTORE 的 Amazon RDS 实例。
1. 在您的本地账户中使用以下脚本创建一个主密钥:
USE Master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD='InsertStrongPasswordHere'; GO
2. 在您的本地账户中创建一个受主密钥保护的证书:
CREATE CERTIFICATE TDE_Cert WITH SUBJECT='Database_Encryption'; GO
3. 使用以下脚本开始本机备份。
注意:启用压缩功能可避免在还原到 RDS 时出现问题。
BACKUP DATABASE [TestDB] TO DISK =N'E:\Backup\EncryptedBackupFromOnpremise.bak' WITH COMPRESSION, ENCRYPTION( ALGORITHM = AES_256, SERVER CERTIFICATE = [TDE_Cert] ), STATS = 10 GO
4. 使用 AWS 管理控制台将加密的备份上传到 S3 桶 tde-db。
5. 运行以下命令还原数据库:
exec msdb.dbo.rds_restore_database @restore_db_name='onpremdb', @s3_arn_to_restore_from='arn:aws:s3:::tde-db/EncryptedBackupFromOnpremise.bak';
加密的 Microsoft Azure 备份
**注意:**此解决方案涉及的步骤与前面各节相似。但是,加密备份在 Microsoft Azure 备份容器启动,而不是在本地存储中。在开始执行以下解决步骤之前,请确保您已经创建了以下资源:
- 一个 Amazon Simple Storage Service(Amazon S3)桶。
- 一个配置了 TDE 和 SQLSERVER_BACKUP_RESTORE 选项组的 RDS 实例。
- 一个配置了用于加密备份的证书的本地账户。
- 一个活跃的 Microsoft Azure 账户。
1. 在 Microsoft Azure 中创建一个存储账户。有关更多信息,请参阅 Microsoft 文档网站中的创建存储账户。
2. 根据共享访问签名创建凭证。有关更多信息,请参阅 Microsoft 文档网站中的为存储容器创建 SAS 令牌。
USE master CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a forward slash at the end WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and should not be changed , SECRET = 'sharedaccesssignature' GO
3. 开始对 Microsoft Azure 存储进行本机加密备份:
BACKUP DATABASE [TestDB] TO URL = N'https://backuptestsanketh.blob.core.windows.net/backup/TestDB_backup_2022_09_29_112330.bak' WITH COPY_ONLY, NOFORMAT, NOINIT, NAME = N'BackupEnc-Full Database Backup', NOSKIP, NOREWIND, NOUNLOAD, COMPRESSION, ENCRYPTION(ALGORITHM = AES_128, SERVER CERTIFICATE = [On_PremTDE_Cert]), STATS = 10 GO
**注意:**Amazon RDS 不支持直接从 Microsoft Azure 存储容器还原备份。因此,您必须将备份下载到中间系统。
4. 将备份文件上传到 S3 桶(tde-db)。
5. 要对私钥和证书进行备份并还原到 RDS 实例,请按照解决“Cannot find server certificate with thumbprint(找不到带指纹的服务器证书)”错误部分中的步骤进行操作。
6. 满足先决条件后,运行以下命令还原加密备份:
exec msdb.dbo.rds_restore_database @restore_db_name='AzureBackupEncrypted', @s3_arn_to_restore_from='arn:aws:s3:::tde-db/backup/azure-encrypted.bak'
解决“Cannot find server certificate with thumbprint(找不到带指纹的服务器证书)”错误
在另一个未配置证书的环境中还原加密备份会导致以下错误:
Cannot find server certificate with thumbprint '0xBA01F2AF71C3FB4A92C5F69BDE3EC8DB318D7D0E'
要避免上述错误,请执行以下操作:
1. 在您要执行本机恢复的 AWS 账户中创建一个新的 AWS Key Management Service(AWS KMS)密钥。
2. 生成 AWS KMS 数据密钥以启动证书备份:
aws kms generate-data-key --key-id KMS-Key-ID --key-spec AES_256 --region us-west-2
以下是前述命令的示例输出:
{ "Plaintext": "Gve+VE1JV8aufhDkPKeWceEt+vZaTYZCH25/OLPo+a4=", "KeyId": "arn:aws:kms:us-west-2:289799745972:key/eee4d613-4871-4cee-87d8-a54ad8d5251b", "CiphertextBlob": "AQIDAHiojOaIcTtQGK4gqEf6QcYuVUutMiW0y52tG63GqOknSgF0ZtnfmfqadzhfWUlRSx15AAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM/U3+BkE/yN5Jf0ckAgEQgDtoG9coTwG7bnPGx3c4hND8LAc4LEPnxd2BLQdJDOjqXU0LgudNfVUw4xNfWy2XCDgmSYV0nHU9EVbwkQ==" }
3. 开始备份源实例(本地实例或 EC2 实例)中的证书和私钥:
use master BACKUP CERTIFICATE TDE_Cert TO FILE= 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\certificatename.cer' WITH PRIVATE KEY ( FILE= 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\privatekey.pvk', ENCRYPTION BY PASSWORD='Gve+VE1JV8aufhDkPKeWceEt+vZaTYZCH25/OLPo+a4=')
4. 将备份证书文件上传到 S3 桶 tde-bkt。
5. 将私钥文件上传到 S3 桶 tde-bkt。上传后,编辑私钥文件的元数据,然后指定以下值:
- 键:x-amz-meta-rds-tde-pwd
- 值:在步骤 2 中获得的 CipertexBlob。
6. 还原 RDS 实例中的证书:
exec msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_ec2_tde_cert', @certificate_file_s3_arn='arn:aws:s3:::tde-bkt/certificatename.cer', @private_key_file_s3_arn='arn:aws:s3:::tde-bkt/privatekey.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:aws-account-id:key/key-id';
7. 运行以下命令还原数据库:
exec msdb.dbo.rds_restore_database @restore_db_name='onpremdb', @s3_arn_to_restore_from='arn:aws:s3:::tde-db/EncryptedBackupFromOnpremise.bak';
相关信息
Migrate TDE-enabled SQL Server databases to Amazon RDS for SQL Server

相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前