为现有的 AlwaysOn 数据库启用 TDE

db2*_*db2 6 sql-server sql-server-2012 availability-groups transparent-data-encryption

我需要对 AlwaysOn 进行一些基准测试,无论是否启用 TDE。我看到的所有说明都涉及将加密数据库添加到可用性组,但我没有提到为 AG 中已有的数据库启用加密。

我可以将服务器证书恢复到所有节点,然后从主节点启用 TDE 吗?我希望我不需要从 AG 中删除数据库,对其进行加密,然后重新初始化所有节点,因为数据库大约为 100 GB。如果需要,我们可以这样做,但这肯定会减慢我们的测试速度。

更新

我只是在一些实验室虚拟机上尝试过这个。我能够在主节点上创建一个证书,在所有辅助节点上恢复它,然后使用这个证书在主节点上创建一个数据库加密密钥。之后我所要做的就是ALTER DATABASE AdventureWorks SET ENCRYPTION ON在主服务器上,一两分钟后,sys.dm_database_encryption_keys 在所有节点上都显示了 encryption_state = 3。

那么,后续问题:是否有任何理由认为我不应该使用此程序?SQL Server 似乎对结果很满意,但我还没有看到任何地方讨论过这种方法。在处理加密和高可用性问题时,我不想让事情碰运气。

db2*_*db2 4

在没有任何其他输入的情况下,这就是我能够推断出的。短篇故事:这看起来效果很好。

据我所知,为数据库启用 TDE 是一个记录操作,但实际的数据加密并未记录(否则事务日志将大幅增长,但事实并非如此)。我假设有类似差异更改映射的东西,或者页面标题中的标志来指示页面是否加密,并且存储引擎只是仔细检查所有内容,直到完全加密为止。

当我在主数据库上启用 TDE 时,辅助数据库最终也会被加密(我已使用十六进制编辑器验证了这一点)。当加密正在进行时,视图 sys.dm_database_encryption_keys 指示所有辅助服务器的percent_complete 为0,并且该值永远不会增加。主服务器正常更新该列。所有副本都倾向于按照自己的节奏完成加密,此时 crypto_state 更改为 3。似乎一旦完成,一切都会正常工作。