译:如何成功恢复TDE加密过的数据库

这篇具有很好参考价值的文章主要介绍了译:如何成功恢复TDE加密过的数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文地址: https://www.mssqltips.com/sqlservertip/3572/recovering-a-sql-server-tde-encrypted-database-successfully/

 

问题:

我的任务是在具有敏感信息的SQL Server数据库上设置透明数据加密(TDE)。在我看到的示例中,我知道我需要主数据库中的主密钥,然后需要用该主密钥加密的证书。
一个浮现在脑海中的问题是,如果我选择将数据库恢复到不同的服务器上我的数据库主密钥是否必须具有相同的密码? 我见过的每个例子都包含相同的密码。为了成功还原,我还需要计划些什么?

解决方案:

为SQL Server数据库启用TDE加密是一个简单的过程。它包括:
1,在主数据库中创建数据库主密钥master key。
2,创建由该密钥master key加密的证书。
3,备份证书和证书的私钥。虽然加密数据库不需要这样做,但您希望立即这样做。(译者注:为了在别的机器上还原加密后的数据库,必须要有证书以及证书的私钥)
4,在(用户自定义)数据库中创建由证书加密的密钥。
5,修改数据库以开启加密。
如果您正在阅读本文并且不熟悉版本要求,那么TDE仅适用于Microsoft SQL Server的企业版(译者注:自SQLServer 2017开始,企业版,标准版 web版均支持TDE )。
 

使用TDE创建新的SQL Server数据库

让我们用下面的代码设置一个示例数据库:
USE [master];
GO 

-- Create the database master key
-- to encrypt the certificate
CREATE MASTER KEY
  ENCRYPTION BY PASSWORD = 'FirstServerPassw0rd!';
GO 

-- Create the certificate we're going to use for TDE
CREATE CERTIFICATE TDECert
  WITH SUBJECT = 'TDE Cert for Test';
GO 

-- Back up the certificate and its private key
-- Remember the password!
BACKUP CERTIFICATE TDECert
  TO FILE = N'C:\SQLBackups\TDECert.cer'
  WITH PRIVATE KEY ( 
    FILE = N'C:\SQLBackups\TDECert_key.pvk',
 ENCRYPTION BY PASSWORD = 'APrivateKeyP4ssw0rd!'
  );
GO

-- Create our test database
CREATE DATABASE [RecoveryWithTDE];
GO 

-- Create the DEK so we can turn on encryption
USE [RecoveryWithTDE];
GO 

CREATE DATABASE ENCRYPTION KEY
  WITH ALGORITHM = AES_256
  ENCRYPTION BY SERVER CERTIFICATE TDECert;
GO 

-- Exit out of the database. If we have an active 
-- connection, encryption won't complete.
USE [master];
GO 

-- Turn on TDE
ALTER DATABASE [RecoveryWithTDE]
  SET ENCRYPTION ON;
GO 

这将启动数据库上的加密过程。请注意我为数据库主密钥指定的密码。正如所暗示的那样,当我们在第二台服务器上执行恢复时我将使用不同的密码,不需要拥有相同的密码,但需要拥有相同的证书,我们将在查看恢复过程中的“陷阱”时了解这一点。即使在基本为空的数据库上,加密数据库也需要几秒钟的时间。可以通过以下查询查询加密的状态:

-- We're looking for encryption_state = 3
-- Query periodically until you see that state
-- It shouldn't take long
SELECT DB_Name(database_id) AS 'Database', encryption_state 
FROM sys.dm_database_encryption_keys;
正如注释所示,我们希望数据库显示状态为3,这意味着加密已经完成。下面是你应该看到的一个例子:

译:如何成功恢复TDE加密过的数据库

 当encryption_state显示为3时,您应该对数据库进行备份,因为我们将需要它来恢复到第二台服务器(您的路径可能不同):

-- Now backup the database so we can restore it
-- Onto a second server
BACKUP DATABASE [RecoveryWithTDE]
TO DISK = N'C:\SQLBackups\RecoveryWithTDE_Full.bak';
GO 
现在我们有了备份,让我们将该备份恢复到SQL Server的另一个实例。
 

Failed Restore - No Key, No Certificate

恢复受TDE保护的数据库的第一种情况是,我们尝试进行恢复,但没有任何加密块被恢复。我们没有数据库主密钥,当然也没有证书。
这就是为什么TDE是伟大的。如果没有这些部分,恢复就无法工作。让我们尝试恢复(注意:您的路径可能不同):
-- Attempt the restore without the certificate installed
RESTORE DATABASE [RecoveryWithTDE]
  FROM DISK = N'C:\SQLBackups\RecoveryWithTDE_Full.bak'
  WITH MOVE 'RecoveryWithTDE' TO N'C:\SQLData\RecoveryWithTDE_2ndServer.mdf',
       MOVE 'RecoveryWithTDE_log' TO N'C:\SQLData\RecoveryWithTDE_2ndServer_log.mdf';
GO
这将会失败。下面是尝试恢复时应该看到的内容:

译:如何成功恢复TDE加密过的数据库

当SQL Server尝试恢复时,它会意识到它需要一个证书,一个特定的证书。由于证书不存在,因此恢复失败。
 

Failed Restore - The Same Certificate Name, But Not the Same Certificate

第二种情况是存在数据库主密钥,并且存在与第一个服务器(甚至是相同的主题)名称相同的证书,但它不是来自第一个服务器的证书。让我们设置并尝试恢复:
-- Let's create the database master key and a certificate with the same name
-- But not from the files. Note the difference in passwords
CREATE MASTER KEY
  ENCRYPTION BY PASSWORD = 'SecondServerPassw0rd!';
GO 

-- Though this certificate has the same name, the restore won't work
CREATE CERTIFICATE TDECert
  WITH SUBJECT = 'TDE Cert for Test';
GO 

-- Since we don't have the corrected certificate, this will fail, too.
RESTORE DATABASE [RecoveryWithTDE]
  FROM DISK = N'C:\SQLBackups\RecoveryWithTDE_Full.bak'
  WITH MOVE 'RecoveryWithTDE' TO N'C:\SQLData\RecoveryWithTDE_2ndServer.mdf',
       MOVE 'RecoveryWithTDE_log' TO N'C:\SQLData\RecoveryWithTDE_2ndServer_log.mdf';
GO

请注意数据库主密钥密码(与第一台机器上的主密钥密码)是的不同,这两个主密钥的密码这是不同的,但这不是我们在恢复中失败的原因。和之前的情况一样,我们没有正确的证书。结果,您将得到与前一种情况相同的错误。

Failed Restore - The Right Certificate, but Without the Private Key

下一个场景是完成证书恢复,但没有私钥。这也将失败。但是,在尝试T-SQL代码之前,可能必须修复证书文件和私钥文件上的文件权限。如果您试图在与第一个实例位于同一系统上的SQL Server实例上执行恢复,则可能会出现这种情况。
为了确保第二个实例可以访问这些文件,请转到文件的位置并调出文件属性(右键单击文件,然后从弹出菜单中选择properties)。单击“安全”选项卡,然后单击“高级”按钮。当SQL Server写这些文件时,它可能破坏了权限的继承,我们将修复这个问题。

译:如何成功恢复TDE加密过的数据库

 这将出现一个不同的界面,您应该查看权限选项卡。如果您看到它,请单击Continue按钮。如果UAC打开,你会看到它。

译:如何成功恢复TDE加密过的数据库

 现在您将打继承选项。注意我圈出来的东西。如果框未选中,如下图所示,这意味着取消继承。如果您的文件就是这种情况,请单击复选框,并在每个接口单击OK以重新打开继承。

译:如何成功恢复TDE加密过的数据库

 现在让我们尝试恢复证书,但故意忘记使用私钥进行恢复。在从文件创建证书之前,必须先删除刚刚创建的证书。

-- Let's drop the certificate and do the restore of it...
-- But without the private key
DROP CERTIFICATE TDECert;
GO 

-- Restoring the certificate, but without the private key.
CREATE CERTIFICATE TDECert
  FROM FILE = 'C:\SQLBackups\TDECert.cer'
GO

-- We have the correct certificate, but not the private key.
-- This should fail as well.
RESTORE DATABASE [RecoveryWithTDE]
  FROM DISK = N'C:\SQLBackups\RecoveryWithTDE_Full.bak'
  WITH MOVE 'RecoveryWithTDE' TO N'C:\SQLData\RecoveryWithTDE_2ndServer.mdf',
       MOVE 'RecoveryWithTDE_log' TO N'C:\SQLData\RecoveryWithTDE_2ndServer_log.mdf';
GO

我们有正确的证书,但是没有私钥,SQL Server不能用它来解密数据库。结果,我们得到一个不同的错误,告诉我们这个键有问题。错误提示密钥似乎已损坏,但我们知道真正的问题:我们没有恢复密钥。

译:如何成功恢复TDE加密过的数据库

 文章来源地址https://www.toymoban.com/news/detail-681158.html

The Successful Restore

为了执行成功的恢复,我们需要主数据库中的数据库主密钥,我们需要恢复用于加密数据库的证书,但我们需要确保使用私钥恢复它。以核对表形式:
1,在主数据库中有一个数据库主密钥master key。
2,用于加密数据库的证书将与其私钥一起恢复(译者注:还原证书时需要与创建证书时的私钥的密码一致,也即 DECRYPTION BY PASSWORD必须与创建证书时一致,否则无法还原证书)。
3,完成数据库恢复。
既然有了数据库主密钥master key,那么让我们执行最后两个步骤。当然,由于我们必须清除以前的证书,我们将在我们发出的命令中有一个删除证书:
-- Let's do this one more time. This time, with everything,
-- Including the private key.
DROP CERTIFICATE TDECert;
GO 

-- Restoring the certificate, but without the private key.
CREATE CERTIFICATE TDECert
  FROM FILE = 'C:\SQLBackups\TDECert.cer'
  WITH PRIVATE KEY ( 
    FILE = N'C:\SQLBackups\TDECert_key.pvk',
 DECRYPTION BY PASSWORD = 'APrivateKeyP4ssw0rd!'
  );
GO

-- We have the correct certificate and we've also restored the 
-- private key. Now everything should work. Finally!
RESTORE DATABASE [RecoveryWithTDE]
  FROM DISK = N'C:\SQLBackups\RecoveryWithTDE_Full.bak'
  WITH MOVE 'RecoveryWithTDE' TO N'C:\SQLData\RecoveryWithTDE_2ndServer.mdf',
       MOVE 'RecoveryWithTDE_log' TO N'C:\SQLData\RecoveryWithTDE_2ndServer_log.mdf';
GO

一切就绪,我们终于成功了!

译:如何成功恢复TDE加密过的数据库

如果在执行恢复时没有看到升级步骤消息,请不要惊慌。
对于这个例子,我在SQL Server 2008 R2实例上创建了初始数据库,并将其恢复到SQL Server 2014实例上。
因此,如果您有关于是否可以将受TDE保护的数据库恢复到不同版本的SQL Server的问题,那么答案是肯定的,只要新实例运行的是企业版,并且新实例具有相同或更高版本的SQL Server(包括服务包、累积更新和任何热修复程序/补丁)。

第二个要求不应该令人惊讶,因为这是将数据库恢复到不同服务器的标准要求。

 

Next Steps

  • Read up on some more points you should know about implementing TDE in SQL Server 2008.
  • Learn how to configure TDE in SQL Server 2012 when using Availability Groups.
  • Understand how to set up encrypted backups in SQL Server 2014 for cases where you can't use TDE.
     

 

到了这里,关于译:如何成功恢复TDE加密过的数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用 PHP 进行数据库备份和恢复?

    想要使用PHP进行数据库备份和恢复? 首先,我们要明白为什么要备份和恢复数据库。因为有时候,我们的数据库可能会被黑客攻击或者系统故障所影响,导致数据丢失或损坏。所以,为了防止这种情况发生,我们需要定期备份数据库,并在需要时快速恢复。 好了,现在我们

    2024年02月15日
    浏览(91)
  • 运行在容器中Postgres数据库数据损坏后如何恢复?

    在使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss, 我介绍了将 RssHub + Tiny Tiny RSS 部署到 K8s 集群中的方案. 其中 TTRSS 会用到 Postgres 存储数据, 也一并部署到 K8s 容器中. 但是最近, 由于一次错误操作, 导致 Postgres 数据库的 WAL 损坏, Postgres 的 Pod 频繁 CrashBackoffLoop. 具体报

    2024年02月08日
    浏览(44)
  • Oracle Non-CDB配置 TDE(透明数据加密) 的过程

    此文档虽然是针对non CDB而写,但是对于CDB的操作过程也是类似的,即在CDB$ROOT中设置完成wallet设置后,在PDB中设置和打开MEK即可。 请确保目录 $ORACLE_SID/admin/$ORACLE_SID 存在,例如此目录为: /u01/app/oracle/admin/noncdb 配置TDE过程: 下面开始加密数据库的users表空间: 加密过程中的监

    2024年02月09日
    浏览(39)
  • 数据库数据恢复-Oracle数据库数据恢复案例

    数据库数据恢复环境: Oracle数据库ASM磁盘组有4块成员盘。 数据库故障分析: Oracle数据库ASM磁盘组掉线 ,ASM实例无法挂载,用户联系我们要求恢复oracle数据库。 数据库数据恢复工程师拿到磁盘后,先将所有磁盘以只读方式进行扇区级别的镜像备份,后续的数据分析和数据恢

    2024年02月13日
    浏览(67)
  • 数据库数据恢复-Syabse数据库存储页底层数据杂乱的数据恢复案例

    数据库恢复环境: Sybase版本:SQL Anywhere 8.0。 数据库故障: 数据库所在的设备意外断电后,数据库无法启动。 错误提示: 使用Sybase Central连接后报错:     数据库故障分析: 经过北亚企安数据恢复工程师检测,定位到数据库无法启动的原因:突然断电导致Sybase数据库无法正

    2024年02月15日
    浏览(47)
  • 数据库数据恢复-Oracle数据库文件出现坏块的数据恢复案例

    Oracle数据库故障初检分析: 打开Oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。用户急需恢复zxfg用户下的数据。 出现上述报错的可能原因包括:控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。 北亚企安数据

    2024年02月14日
    浏览(49)
  • 【数据库原理】(27)数据库恢复

    在数据库系统中,恢复是指在发生某种故障导致数据库数据不再正确时,将数据库恢复到已知正确的某一状态的过程。数据库故障可能由多种原因引起,包括硬件故障、软件错误、操作员失误以及恶意破坏。为了确保数据库的安全性和完整性,数据库管理系统(DBMS)必须具有

    2024年01月16日
    浏览(61)
  • 数据库实验7---数据库的备份与恢复

    使用mysqldump命令备份数据库studentsdb的所有表,存于D:下,文件名为all_tables.sql。 在MySQL服务器上创建数据库student1,使用mysql命令将备份文件all_tables.sql恢复到数据库student1中。 使用mysqldump命令备份数据库studentsdb的所有表,存于D:下,文件名为s_c.sql。 在MySQL服务器上创建数据

    2024年02月09日
    浏览(62)
  • 数据库第十章(数据库恢复技术)十一章(并发控制)

    目录 1.事务 2.并发控制 1.事务 事务的特点:ACID 原子性   atom 一致性   consistent 隔离性   isolation 持久性   durable 故障的种类 1.事务内部故障         措施:采取redo重做和undo撤销技术 2.系统故障DBMS         措施:重启 3.介质故障         硬件损坏 4.计算机病毒   数据恢

    2024年02月09日
    浏览(59)
  • Oracle 数据库恢复删除的数据

    需求描述: 同事让删除脏数据,结果删错了,需要恢复数据 思路: 利用闪回恢复数据只能恢复15分钟之内的,后面undo空间会被重写,就恢复不了,所以删除数据后,要谨慎再三确认,若发现不对,则利用闪回恢复 先查询删除时的时间节点的快照 查到时间戳之后 闪回恢复数

    2024年01月24日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包