如果我查询sys.dm_database_encryption_keys
,则会返回encryption_state
3
(已加密),percent_complete
0
。如果我查询sys.databases
,则is_encrypted
列的值为0(未加密)。这两个似乎与我相反。
数据库是否已加密? sys.dm_database_encryption_keys
这样说,但is_encrypted
sys.databases
不同意。
在数据库属性下,属性Encryption Enabled
为false。
我很困惑。
答案 0 :(得分:14)
一旦启用了透明数据加密(TDE),您似乎就会遇到SQL服务器自动加密数据库的情况,例如在tempdb的情况下。我在使用tempdb的SQL Server 2012测试实例中看到完全相同的情况。 MSDN:如果使用TDE对SQL Server实例上的任何其他数据库进行加密,则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 来验证数据库是否已加密。
最后,这是一个来自John Magnabosco's post的非常方便的脚本,显示哪些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
希望这会使它现在不那么混乱。