gpt4 book ai didi

sql-server - sys.dm_database_encryption_keys 中的加密状态与 sys.databases 不一致

转载 作者:行者123 更新时间:2023-12-02 11:58:04 25 4
gpt4 key购买 nike

如果我查询sys.dm_database_encryption_keys,它返回的encryption_state3(加密),percent_complete 0。如果我查询 sys.databases,则 is_encrypted 列的值为 0(未加密)。在我看来,这两者似乎是相互矛盾的。

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

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

我很困惑。

最佳答案

似乎您遇到过这样的情况:一旦启用了透明数据加密 (TDE),数据库就会被 SQL 服务器自动加密,例如 tempdb。我在使用 tempdb 的 SQL Server 2012 测试实例中看到完全相同的情况。 MSDN : 如果 SQL Server 实例上的任何其他数据库使用 TDE 加密,tempdb 系统数据库也会被加密。

is_encrypted = 0 我相信反射(reflect)了数据库是自动加密的事实,而不是通过发出 ALTER 命令。这是MSDN关于此参数的说明:指示数据库是否已加密(反射(reflect)最后使用 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 的一个非常方便的脚本。显示哪些数据库使用 TDE 加密,哪些未加密(加密状态 = 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

希望这能让现在不再那么困惑。

关于sql-server - sys.dm_database_encryption_keys 中的加密状态与 sys.databases 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com