Zum Hauptinhalt springen

Referenz zu Systemsichten

SQL Server-DMVs und Katalogsichten zur Überwachung von DuoKey SQL EKM

Gilt für:
SQL Server 2016+ReferenzDMV / Katalogsichten

Katalogsichten

sys.cryptographic_providers

Microsoft Docs ↗

Gibt Informationen über registrierte kryptografische Anbieter zurück.

SELECT
    provider_id,
    name,
    guid,
    version,
    dll_path,
    is_enabled
FROM sys.cryptographic_providers;
GO
SpalteDatentypBeschreibung
provider_idintEindeutige Kennung für den Anbieter
namesysnameName des kryptografischen Anbieters
guiduniqueidentifierAnbieter-GUID
versionnvarchar(256)Versionszeichenfolge des Anbieters
dll_pathnvarchar(512)Pfad zur Anbieter-DLL
is_enabledbitOb der Anbieter aktiviert (1) oder deaktiviert (0) ist

sys.asymmetric_keys

Microsoft Docs ↗

Gibt Informationen über asymmetrische Schlüssel in der Datenbank zurück.

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
SpalteDatentypBeschreibung
namesysnameSchlüsselname
asymmetric_key_idintEindeutige Kennung für den Schlüssel
algorithm_descnvarchar(60)Algorithmusbeschreibung (z. B. RSA_2048)
key_lengthintSchlüssellänge in Bit
thumbprintvarbinary(32)Schlüssel-Fingerabdruck zur Identifizierung
provider_idintEKM-Anbieter-ID (NULL für Nicht-EKM-Schlüssel)
Tipp
Schlüssel mit einer provider_id ungleich NULL sind EKM-verwaltete Schlüssel.

sys.credentials

Microsoft Docs ↗

Gibt Informationen über SQL Server-Anmeldedaten zurück.

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
SpalteDatentypBeschreibung
credential_idintEindeutige Kennung
namesysnameName der Anmeldedaten
credential_identitynvarchar(4000)Identität (Client-ID für DuoKey)
create_datedatetimeZeitpunkt der Erstellung der Anmeldedaten
target_typenvarchar(100)Zieltyp (CRYPTOGRAPHIC PROVIDER)
target_idintID des Zielanbieters
Hinweis
Der Wert SECRET wird aus Sicherheitsgründen niemals in Systemsichten offengelegt.

Dynamische Verwaltungssichten (DMVs)

sys.dm_database_encryption_keys

Microsoft Docs ↗

Gibt den Verschlüsselungsstatus für alle Datenbanken zurück. Dies ist die primäre DMV zur Überwachung des TDE-Status.

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
SpalteDatentypBeschreibung
database_idintDatenbankkennung
encryption_stateintAktueller Verschlüsselungsstatus (0-6)
key_algorithmnvarchar(32)Verwendeter Algorithmus (z. B. AES)
key_lengthintSchlüssellänge in Bit (128, 192, 256)
encryptor_thumbprintvarbinary(20)Fingerabdruck des schützenden Schlüssels
percent_completerealProzentualer Fortschritt bei Statusänderungen
regenerate_datedatetimeDatum der letzten Schlüsselrotation

Werte des Verschlüsselungsstatus

StatusNameBeschreibung
0Kein DEKKein Datenbankverschlüsselungsschlüssel vorhanden
1UnverschlüsseltDEK vorhanden, aber Verschlüsselung nicht aktiviert
2Wird verschlüsseltVerschlüsselung wird durchgeführt
3VerschlüsseltDatenbank vollständig verschlüsselt
4Schlüssel wird geändertSchlüsselrotation wird durchgeführt
5Wird entschlüsseltEntschlüsselung wird durchgeführt
6Schutz wird geändertÄnderung des Schutzes wird durchgeführt

sys.dm_io_virtual_file_stats

Microsoft Docs ↗

Gibt E/A-Statistiken für Daten- und Protokolldateien zurück. Nützlich zur Überwachung der Auswirkungen von TDE auf die Leistung.

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
SpalteDatentypBeschreibung
num_of_readsbigintAnzahl der ausgeführten Lesevorgänge
num_of_writesbigintAnzahl der ausgeführten Schreibvorgänge
io_stall_read_msbigintGesamte Wartezeit auf Lesevorgänge (ms)
io_stall_write_msbigintGesamte Wartezeit auf Schreibvorgänge (ms)
size_on_disk_bytesbigintGröße der Datei auf dem Datenträger

Häufige Überwachungsabfragen

Zustandsprüfung des EKM-Anbieters

Zustandsprüfung des AnbietersSQL
-- 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

Schlüsselalter und Rotationsstatus

Abfrage zum SchlüsselalterSQL
-- 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

Überwachung des Verschlüsselungsfortschritts

VerschlüsselungsfortschrittSQL
-- 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

Umfassende Dashboard-Abfrage

Diese Abfrage bietet einen vollständigen Überblick über Ihren TDE-Verschlüsselungsstatus und eignet sich für Dashboards und Überwachungstools:

Vollständiges Verschlüsselungs-DashboardSQL
-- 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
Tipp
Planen Sie diese Abfrage so, dass sie regelmäßig ausgeführt wird, und exportieren Sie die Ergebnisse zur proaktiven Verwaltung in ein Überwachungs-Dashboard oder ein Alarmsystem.