一旦启用透明数据加密 (TDE),您似乎遇到了 SQL 服务器自动加密数据库的情况,例如在 tempdb 的情况下。我在使用 tempdb 的 SQL Server 2012 测试实例中看到完全相同的情况。
MSDN:如果 SQL Server 实例上的任何其他数据库使用 TDE 加密,则 tempdb 系统数据库将被加密。
is_encrypted = 0我相信反映了 DB 是自动加密的事实,而不是通过发出 ALTER 命令。以下是MSDN关于此参数的说明: 指示数据库是否已加密(反映上次使用 ALTER DATABASE SET ENCRYPTION 子句设置的状态)。
percent_complete = 0当没有正在进行的加密时预期。来自MSDN:数据库加密状态更改的完成百分比。如果没有状态变化,这将为 0。
encryption_state = 3看起来是回答问题的最终提示。MSDN:指示数据库是否加密,3 = 加密。
MSDN TDE页面本身建议使用sys.dm_database_encryption_keys来验证 DB 是否已加密。
最后,这是John Magnabosco 的帖子中的一个非常方便的脚本,显示了哪些 DB 使用 TDE 加密,哪些没有(encryption_state = 3 是出纳员):
SELECT
db.name,
db.is_encrypted,
dm.encryption_state,
dm.percent_complete,
dm.key_algorithm,
dm.key_length
FROM
sys.databases db
LEFT OUTER JOIN sys.dm_database_encryption_keys dm
ON db.database_id = dm.database_id;
GO
希望这可以减少现在的混乱。