Aller au contenu principal

Référence des vues système

DMV et vues de catalogue de SQL Server pour la surveillance de DuoKey SQL EKM

S'applique à :
SQL Server 2016+RéférenceDMV / Vues de catalogue

Vues de catalogue

sys.cryptographic_providers

Documentation Microsoft ↗

Renvoie des informations sur les fournisseurs cryptographiques enregistrés.

SELECT
    provider_id,
    name,
    guid,
    version,
    dll_path,
    is_enabled
FROM sys.cryptographic_providers;
GO
ColonneType de donnéesDescription
provider_idintIdentifiant unique du fournisseur
namesysnameNom du fournisseur cryptographique
guiduniqueidentifierGUID du fournisseur
versionnvarchar(256)Chaîne de version du fournisseur
dll_pathnvarchar(512)Chemin vers la DLL du fournisseur
is_enabledbitIndique si le fournisseur est activé (1) ou désactivé (0)

sys.asymmetric_keys

Documentation Microsoft ↗

Renvoie des informations sur les clés asymétriques de la base de données.

SELECT
    name,
    principal_id,
    asymmetric_key_id,
    pvt_key_encryption_type_desc,
    algorithm_desc,
    key_length,
    sid,
    thumbprint,
    provider_id
FROM sys.asymmetric_keys;
GO
ColonneType de donnéesDescription
namesysnameNom de la clé
asymmetric_key_idintIdentifiant unique de la clé
algorithm_descnvarchar(60)Description de l'algorithme (par ex. RSA_2048)
key_lengthintLongueur de la clé en bits
thumbprintvarbinary(32)Empreinte de la clé pour l'identification
provider_idintID du fournisseur EKM (NULL pour les clés non-EKM)
Astuce
Les clés dont le provider_id n'est pas NULL sont des clés gérées par l'EKM.

Renvoie des informations sur les identifiants SQL Server.

SELECT
    credential_id,
    name,
    credential_identity,
    create_date,
    modify_date,
    target_type,
    target_id
FROM sys.credentials
WHERE name LIKE '%EKM%' OR name LIKE '%DuoKey%';
GO
ColonneType de donnéesDescription
credential_idintIdentifiant unique
namesysnameNom de l'identifiant
credential_identitynvarchar(4000)Identité (Client ID pour DuoKey)
create_datedatetimeDate de création de l'identifiant
target_typenvarchar(100)Type de cible (CRYPTOGRAPHIC PROVIDER)
target_idintID du fournisseur cible
Remarque
La valeur SECRET n'est jamais exposée dans les vues système pour des raisons de sécurité.

Vues de gestion dynamique (DMV)

sys.dm_database_encryption_keys

Documentation Microsoft ↗

Renvoie l'état de chiffrement de toutes les bases de données. Il s'agit de la principale DMV pour surveiller l'état du TDE.

SELECT
    database_id,
    encryption_state,
    create_date,
    regenerate_date,
    modify_date,
    set_date,
    opened_date,
    key_algorithm,
    key_length,
    encryptor_thumbprint,
    encryptor_type,
    percent_complete
FROM sys.dm_database_encryption_keys;
GO
ColonneType de donnéesDescription
database_idintIdentifiant de la base de données
encryption_stateintÉtat de chiffrement actuel (0-6)
key_algorithmnvarchar(32)Algorithme utilisé (par ex. AES)
key_lengthintLongueur de la clé en bits (128, 192, 256)
encryptor_thumbprintvarbinary(20)Empreinte de la clé de protection
percent_completerealPourcentage d'avancement des changements d'état
regenerate_datedatetimeDate de la dernière rotation de clé

Valeurs de l'état de chiffrement

ÉtatNomDescription
0Aucune DEKAucune clé de chiffrement de base de données présente
1Non chiffréLa DEK existe mais le chiffrement n'est pas activé
2Chiffrement en coursChiffrement en cours
3ChiffréBase de données entièrement chiffrée
4Changement de cléRotation de clé en cours
5Déchiffrement en coursDéchiffrement en cours
6Changement de protectionChangement de protecteur en cours

sys.dm_io_virtual_file_stats

Documentation Microsoft ↗

Renvoie les statistiques d'E/S pour les fichiers de données et de journaux. Utile pour surveiller l'impact du TDE sur les performances.

SELECT
    database_id,
    file_id,
    num_of_reads,
    num_of_writes,
    io_stall_read_ms,
    io_stall_write_ms,
    size_on_disk_bytes
FROM sys.dm_io_virtual_file_stats(NULL, NULL);
GO
ColonneType de donnéesDescription
num_of_readsbigintNombre de lectures émises
num_of_writesbigintNombre d'écritures émises
io_stall_read_msbigintTemps total d'attente des lectures (ms)
io_stall_write_msbigintTemps total d'attente des écritures (ms)
size_on_disk_bytesbigintTaille du fichier sur le disque

Requêtes de surveillance courantes

Vérification de l'état du fournisseur EKM

Vérification de l'état du fournisseurSQL
-- Verify EKM provider is operational
DECLARE @result INT;

BEGIN TRY
    SELECT @result = COUNT(*)
    FROM sys.cryptographic_providers
    WHERE name = 'DuoKeyProvider' AND is_enabled = 1;

    IF @result = 1
        PRINT 'EKM Provider: HEALTHY';
    ELSE
        PRINT 'EKM Provider: NOT FOUND OR DISABLED';
END TRY
BEGIN CATCH
    PRINT 'EKM Provider: ERROR - ' + ERROR_MESSAGE();
END CATCH
GO

Ancienneté des clés et état de rotation

Requête sur l'ancienneté des clésSQL
-- Track key creation and modification for rotation planning
SELECT
    ak.name AS KeyName,
    ak.create_date AS Created,
    ak.modify_date AS Modified,
    DATEDIFF(DAY, ak.create_date, GETDATE()) AS AgeDays,
    CASE
        WHEN DATEDIFF(DAY, ak.create_date, GETDATE()) > 365
        THEN 'Rotation Recommended'
        WHEN DATEDIFF(DAY, ak.create_date, GETDATE()) > 270
        THEN 'Rotation Soon'
        ELSE 'OK'
    END AS RotationStatus
FROM sys.asymmetric_keys ak
WHERE ak.provider_id IS NOT NULL
ORDER BY ak.create_date;
GO

Suivi de la progression du chiffrement

Progression du chiffrementSQL
-- Monitor ongoing encryption operations
SELECT
    DB_NAME(database_id) AS DatabaseName,
    encryption_state,
    CASE encryption_state
        WHEN 2 THEN 'Encrypting'
        WHEN 4 THEN 'Key Rotating'
        WHEN 5 THEN 'Decrypting'
        WHEN 6 THEN 'Changing Protector'
    END AS Operation,
    percent_complete AS [Progress %],
    modify_date AS LastUpdate,
    DATEDIFF(MINUTE, modify_date, GETDATE()) AS MinutesSinceUpdate
FROM sys.dm_database_encryption_keys
WHERE encryption_state IN (2, 4, 5, 6);
GO

Requête de tableau de bord complète

Cette requête fournit une vue d'ensemble complète de l'état de votre chiffrement TDE, adaptée aux tableaux de bord et aux outils de surveillance :

Tableau de bord de chiffrement completSQL
-- Comprehensive TDE encryption status dashboard
SELECT
    DB_NAME(dek.database_id) AS [Database],
    d.state_desc AS [DB State],
    CASE dek.encryption_state
        WHEN 0 THEN 'No DEK'
        WHEN 1 THEN 'Unencrypted'
        WHEN 2 THEN 'Encrypting...'
        WHEN 3 THEN 'Encrypted'
        WHEN 4 THEN 'Key Changing...'
        WHEN 5 THEN 'Decrypting...'
        WHEN 6 THEN 'Protection Changing...'
    END AS [Encryption State],
    dek.percent_complete AS [Progress %],
    dek.key_algorithm + '_' + CAST(dek.key_length AS VARCHAR) AS [Algorithm],
    ak.name AS [Protecting Key],
    cp.name AS [EKM Provider],
    dek.create_date AS [DEK Created],
    dek.regenerate_date AS [Last Rotated],
    DATEDIFF(DAY, ISNULL(dek.regenerate_date, dek.create_date), GETDATE())
        AS [Days Since Rotation],
    CASE
        WHEN DATEDIFF(DAY, ISNULL(dek.regenerate_date, dek.create_date), GETDATE()) > 365
        THEN 'OVERDUE'
        WHEN DATEDIFF(DAY, ISNULL(dek.regenerate_date, dek.create_date), GETDATE()) > 270
        THEN 'DUE SOON'
        ELSE 'OK'
    END AS [Rotation Status]
FROM sys.dm_database_encryption_keys dek
INNER JOIN sys.databases d ON dek.database_id = d.database_id
LEFT JOIN sys.asymmetric_keys ak ON dek.encryptor_thumbprint = ak.thumbprint
LEFT JOIN sys.cryptographic_providers cp ON ak.provider_id = cp.provider_id
ORDER BY d.name;
GO
Astuce
Planifiez l'exécution périodique de cette requête et exportez les résultats vers un tableau de bord de surveillance ou un système d'alerte pour une gestion proactive.