Sql server sys.dm_数据库_加密_密钥中的加密状态与sys.dm_数据库不一致

Sql server sys.dm_数据库_加密_密钥中的加密状态与sys.dm_数据库不一致,sql-server,tde,Sql Server,Tde,如果我查询sys.dm_数据库加密_密钥,它会返回encryption_状态为3(加密),完成百分比为0。如果我查询sys.databases,是加密的列的值为0(未加密)。这两个人对我来说似乎是对立的 数据库加密了吗sys.dm_数据库加密_密钥这样说,但是sys.databases中的是加密的不同意 在数据库属性下,属性启用加密为false 我很困惑。您似乎遇到了这样一种情况,SQL server会自动对数据库进行加密,例如在启用透明数据加密(TDE)后的tempdb中。我在使用tempdb

如果我查询
sys.dm_数据库加密_密钥
,它会返回
encryption_状态
3
(加密),
完成百分比
0
。如果我查询
sys.databases
是加密的
列的值为0(未加密)。这两个人对我来说似乎是对立的

数据库加密了吗
sys.dm_数据库加密_密钥
这样说,但是
sys.databases中的
是加密的
不同意

在数据库属性下,属性
启用加密
为false


我很困惑。

您似乎遇到了这样一种情况,SQL server会自动对数据库进行加密,例如在启用透明数据加密(TDE)后的tempdb中。我在使用tempdb的SQLServer2012测试实例中看到了完全相同的情况。 :如果SQL Server实例上的任何其他数据库使用TDE加密,则tempdb系统数据库将被加密

is_encrypted=0我认为这反映了DB是自动加密的,而不是通过发出ALTER命令。 下面是关于此参数的说明:指示数据库是否加密(通过使用ALTER database set ENCRYPTION子句反映上次设置的状态)

当没有正在进行的加密时,预期完成百分比=0。From:数据库加密状态更改的完成百分比。如果没有状态更改,则该值将为0

加密\u state=3似乎是回答这个问题的终极提示:指示数据库是否加密,3=加密

页面本身建议使用sys.dm_database_encryption_keys验证数据库是否加密

最后,这里有一个非常方便的脚本,它显示了哪些数据库是用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