9

如果我查询sys.dm_database_encryption_keys,它会返回一个encryption_stateof 3(加密),percent_completeof 0。如果我查询sys.databases,该is_encrypted列的值为 0(未加密)。在我看来,这两个似乎相互对抗。

数据库是否加密? 这么说,sys.dm_database_encryption_keys但不同意。is_encryptedsys.databases

在数据库属性下,该属性Encryption Enabled为 false。

我很困惑。

4

1 回答 1

21

一旦启用透明数据加密 (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

希望这可以减少现在的混乱。

于 2015-03-18T22:56:37.710 回答