检查我在 SQL Server 上的数据库实例是否通过 TDE 加密?

lxi*_*cas 6 sql-server encryption tde

我对 SQL Server 的透明加密 (TDE) 有疑问。我需要转储一个数据库实例,该实例将由另一个 DBA 通过转储的数据文件远程恢复。我被要求确保转储的数据文件没有 TDE,以便 DBA 可以恢复它。我上网查了一下,发现有一个列出加密状态的查询如下:

SELECT db_name(database_id), encryption_state 
FROM sys.dm_database_encryption_keys;
Run Code Online (Sandbox Code Playgroud)

我的数据库实例根本不在结果中。我运行另一个查询,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

我的数据库实例的 值为 0 is_encrypted,所有其他值为 null。

这是否意味着我的数据库实例根本没有加密?

小智 8

如果你的输出看起来像这样......

    name       | is_encrypted | encryption_state | percent_complete | key_algorithm | ley_length
    --------------------------------------------------------------------------------------------
    MyDatabase | 0            | NULL             | NULL             | NULL          | NULL
Run Code Online (Sandbox Code Playgroud)

...您的数据库[MyDatabase]未加密。它也没有配置数据库加密密钥。

但是,如果任何数据库在除 [is_encrypted] 之外的列中具有非 NULL(例如 [encryption_state] = 1),则这些数据库要么已加密,要么部分加密/解密,要么准备加密。

在此处阅读有关加密状态的详细信息: https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-database-encryption-keys-transact-sql ?view=sql-server-ver15