sql - TDE 我们是否需要在 DR 服务器/Test Server 上备份服务主密钥 (SMK) 和数据库主密钥 (DMK)
问题描述
我正在尝试按照以下步骤实施 TDE
在源服务器上:服务主密钥已存在
在主数据库上创建主密钥
在主数据库上创建证书
在用户数据库上创建数据库加密密钥并在此数据库上启用 TDE
带有私钥(.pvk)和密码的备份证书(.cer)
当我需要在 DR/Test 服务器上恢复这个启用 TDE 的数据库时
测试服务器:
创建证书形式的源服务器的备份
恢复数据库
我发现我们也可以备份服务主密钥 (SMK) 和数据库主密钥 (DMK)。
我的问题是:
为什么我们需要备份 SMK 和 DMK?仅带有私钥文件 .pvk 和密码的证书备份文件 .cer 还不够吗?
我是否需要来自源服务器的相同 SMK 和 DMK 才能在测试/DR 服务器上恢复数据库备份?
为什么在下面的文章中他们没有恢复 SMK 和 DMK?
如果 SQL 安装中已经存在服务主密钥,则在测试服务器上。
如果我创建一个数据库主密钥(我是否需要从源的备份中恢复)
那么接下来的步骤是否只是从源服务器恢复证书然后恢复数据库?
请阐明一些观点。
解决方案
简短的回答:您无需从源服务器备份 DMK 或 SMK 即可恢复您的数据库;证书就足够了。
更长的答案是 SMK 和 DMK 中的每一个都旨在加密加密层次结构中的某些内容。对于 TDE,主数据库的 DMK 对 TDE 证书的私钥部分进行加密。并且主数据库的DMK由SMK加密。这允许 SQL 在没有用户干预的情况下打开证书,从而允许您的数据库在没有用户干预的情况下启动。只要您拥有包含公钥和私钥部分的证书备份,您就可以将其恢复到您想要的任何服务器并使用目标服务器的主数据库 DMK 加密私钥部分,您应该是 g2g。
针对 DMK 和可用性组的一个警告是,如果您的 AG 中的用户数据库具有 DMK,您将希望 SMK 在 AG 中的所有服务器中都相同。打个物理锁的类比,您将锁在 DMK 的私钥上,并确保所有服务器都拥有相同密钥的副本。如果您不这样做,当您进行故障转移时,新主服务器的密钥将无法放入锁中,您必须使用您拥有的密钥(即密码)打开它,然后重新键入锁(即alter master key add encryption by service master key
)。
推荐阅读
- azure - Asp.net core 从 azure cloud blob 段中获取所有文件
- reactjs - 组件销毁后撤消 API 调用
- amazon-web-services - 使用 Cloud Custodian 仅限制特定安全组中的特定端口
- python - 加权中值 pyspark 数据帧
- javascript - node legacy url.parse 已弃用,改用什么?
- javascript - Map(iterable) alternative for IE 11
- python - Example uses queryset instead of model attribute for a DetailView extending class
- python - Absolute Elements Sums
- java - How to autogenerate a Unique ID from Immutables Criteria Library?
- linux - 路径不可用于进程 httpd