如果我查询sys.dm_database_encryption_keys
,它会返回3
(加密)encryption_state
,percent_complete
0
。 如果我查询sys.databases
,is_encrypted
列的值为 0(未加密)。 这两个人似乎对我不利。
数据库是否加密? sys.dm_database_encryption_keys
是这么说的,但is_encrypted
sys.databases
不同意。
在"数据库属性"下,属性Encryption Enabled
为 false。
我很困惑。
似乎您遇到了这样一种情况,即 SQL 服务器会自动加密数据库,例如在启用透明数据加密 (TDE) 后,在 tempdb 的情况下。我在带有tempdb的SQL Server 2012测试实例中看到完全相同的情况。MSDN:如果使用 TDE 加密 SQL Server 实例上的任何其他数据库,则将加密 tempdb 系统数据库。
我相信 is_encrypted = 0 反映了数据库是自动加密的事实,而不是通过发出 ALTER 命令。以下是 MSDN 对此参数的说明: 指示数据库是否已加密(反映上次使用 ALTER DATABASE SET ENCRYPTION 子句设置的状态)。
当没有正在进行的加密时,预期 percent_complete = 0。来自 MSDN:数据库加密状态更改的完成百分比。如果没有状态更改,则为 0。
encryption_state = 3 似乎是回答问题的最终提示。MSDN:指示数据库是否已加密,3 = 已加密。
MSDN TDE 页面本身建议使用sys.dm_database_encryption_keys来验证数据库是否已加密。
最后,这里有一个非常方便的脚本来自John Magnabosco的帖子,显示了哪些数据库是用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
希望这能让它现在不那么混乱。