还原 SQL 数据库时关闭 TDE

Bri*_*anC 6 sql-server transparent-data-encryption

我们刚刚开始使用 TDE。最终它将在我们的 Prod SQL Server 环境和两个主要的非生产环境中,但目前它仅在一个非生产系统中。

我的问题是关于恢复这些数据库。我们还有其他几个环境(企业版和标准版)以及我们有时会将数据库备份发送到的异地供应商。对于那些,我们要么必须使用中间服务器在恢复之前关闭 TDE,要么使用不同的密钥进行备份。

但具体来说,我想知道如何从启用 TDE 的生产环境恢复到启用 TDE 的非生产环境。一旦 TDE 数据库在没有关闭 TDE 的情况下恢复,它是否会继续使用源服务器的密钥?我想知道在这种情况下是否需要关闭和打开 TDE(这需要几个小时)。还要注意我在下面恢复时的奇怪行为。它似乎通过数据库的前一个化身携带历史密钥,并且在复制到具有相同数据库名称的服务器时,允许第二个服务器的密钥。这是正确的吗?

我在由不同 VM 上的两个数据库实例组成的非生产环境中执行了以下操作:

在实例 1 上:

  1. 在数据库 DBA 上启用 TDE,
  2. 备份证书、密钥和数据库,
  3. 将 DBA 的备份恢复到新数据库 DBA2,
  4. 备份数据库 DBA2,在实例 2 上:
  5. 从实例 1 复制 DBA2 备份,
  6. 恢复的 DBA2。

请注意,我没有为 DBA2 创建任何证书或密钥,也没有将任何 DBA 证书和密钥从实例 1 复制到 2。

实例 2 有自己的不相关的 DBA 数据库,其中包含 TDE 证书和密钥。还原后未在 DBA2 上启用 TDE。

所以它看起来像:

  1. 实例 1 DBA 密钥在步骤 3 中转移到 DBA2 中,并且
  2. 尽管实例 1 的 DBA 和实例 2 的 DBA 是不同的实体,但还原过程可能使用了步骤 6 中实例 2 的 DBA 密钥。

以下是这些数据库的加密状态:

    SELECT db_name(database_id), encryption_state,   percent_complete, key_algorithm, key_length
    FROM sys.dm_database_encryption_keys
where db_name(database_id) like 'DBA%'
Run Code Online (Sandbox Code Playgroud)

实例 1:

dbname  encryption_state    percent_complete    key_algorithm   key_length
DBA     3                   0                   AES             256
DBA2    3                   0                   AES             256
Run Code Online (Sandbox Code Playgroud)

实例2:

dbname  encryption_state    percent_complete    key_algorithm   key_length
DBA     3                   0                   AES             256
Run Code Online (Sandbox Code Playgroud)

Sea*_*ser 7

但具体来说,我想知道如何从启用 TDE 的生产环境恢复到启用 TDE 的非生产环境。

一篇关于此的完整文档文章。如果您有具体问题,请告诉我们。

一旦 TDE 数据库在没有关闭 TDE 的情况下恢复,它是否会继续使用源服务器的密钥?

您将在上面的文章中看到,是的,除非保护驻留在该数据库中的数据库加密密钥 (DKE) 的服务器证书已恢复并在目标服务器上可用,否则您将无法读取该数据库.

我想知道在这种情况下是否需要关闭和打开 TDE(这需要几个小时)。

如果客户不能使用 TDE,则这是一项要求(非企业版)。如果您不想将您的内部证书发送给他们,则在恢复到目标服务器后,将服务器证书轮换为新证书。它不需要对数据库进行任何额外的操作(除了元数据更改)。然后,您可以在两个单独的通信渠道或一个安全渠道中向客户发送证书 + 数据库,当然。

还要注意我在下面恢复时的奇怪行为。它似乎通过数据库的前一个化身携带历史密钥,并且在复制到具有相同数据库名称的服务器时,允许第二个服务器的密钥。

嗯?除了数据库的加密状态外,您的输出不显示任何内容。如果没有服务器证书,您实际上无法恢复数据库。因此,如果它让您恢复数据库没有任何问题并且您没有为其恢复服务器证书,那么合乎逻辑的结论是当前服务器证书在源服务器和目标服务器上是相同的,这是安全禁忌.