9

をクエリすると、 of (暗号化された), ofsys.dm_database_encryption_keysが返されます。クエリを実行すると、列の値は 0 (暗号化されていません) になります。この二つは私には相反するように見えます。encryption_state3percent_complete0sys.databasesis_encrypted

データベースは暗号化されていますか? sys.dm_database_encryption_keysそう言いますがis_encryptedsys.databases反対します。

データベース プロパティでは、プロパティEncryption Enabledは false です。

よくわかりません。

4

1 に答える 1

21

透過的データ暗号化 (TDE) が有効になると、tempdb の場合のように、DB が SQL サーバーによって自動的に暗号化される場合があるようです。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 が暗号化されているかどうかを確認することを提案しています。

最後に、 TDE で暗号化されている DB と暗号化されていない DB を示す、 John Magnabosco の投稿からの非常に便利なスクリプトを次に示します (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 に答える