إنتقل إلى المحتوى الرئيسي

مرجع طرق عرض النظام

طرق عرض DMV والكتالوج في SQL Server لمراقبة DuoKey SQL EKM

ينطبق على:
SQL Server 2016+مرجعطرق عرض DMV / الكتالوج

طرق عرض الكتالوج

sys.cryptographic_providers

وثائق Microsoft ↗

تُرجع معلومات حول موفّري التشفير المسجّلين.

SELECT
    provider_id,
    name,
    guid,
    version,
    dll_path,
    is_enabled
FROM sys.cryptographic_providers;
GO
العمودنوع البياناتالوصف
provider_idintالمعرّف الفريد للموفّر
namesysnameاسم موفّر التشفير
guiduniqueidentifierGUID الموفّر
versionnvarchar(256)سلسلة إصدار الموفّر
dll_pathnvarchar(512)مسار ملف DLL الخاص بالموفّر
is_enabledbitما إذا كان الموفّر مُمكَّنًا (1) أو معطّلًا (0)

sys.asymmetric_keys

وثائق Microsoft ↗

تُرجع معلومات حول المفاتيح غير المتماثلة في قاعدة البيانات.

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
العمودنوع البياناتالوصف
namesysnameاسم المفتاح
asymmetric_key_idintالمعرّف الفريد للمفتاح
algorithm_descnvarchar(60)وصف الخوارزمية (مثال: RSA_2048)
key_lengthintطول المفتاح بالبت
thumbprintvarbinary(32)بصمة المفتاح للتعريف
provider_idintمعرّف موفّر EKM (NULL للمفاتيح غير التابعة لـ EKM)
نصيحة
المفاتيح التي تحمل provider_id غير NULL هي مفاتيح مُدارة بواسطة EKM.

تُرجع معلومات حول بيانات اعتماد 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
العمودنوع البياناتالوصف
credential_idintمعرّف فريد
namesysnameاسم بيانات الاعتماد
credential_identitynvarchar(4000)الهوية (Client ID لـ DuoKey)
create_datedatetimeوقت إنشاء بيانات الاعتماد
target_typenvarchar(100)نوع الهدف (CRYPTOGRAPHIC PROVIDER)
target_idintمعرّف الموفّر الهدف
ملاحظة
قيمة SECRET لا تُكشف مطلقًا في طرق عرض النظام لأسباب أمنية.

طرق عرض الإدارة الديناميكية (DMVs)

sys.dm_database_encryption_keys

وثائق Microsoft ↗

تُرجع حالة التشفير لجميع قواعد البيانات. هذه هي الـ DMV الأساسية لمراقبة حالة 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
العمودنوع البياناتالوصف
database_idintمعرّف قاعدة البيانات
encryption_stateintحالة التشفير الحالية (0-6)
key_algorithmnvarchar(32)الخوارزمية المستخدمة (مثال: AES)
key_lengthintطول المفتاح بالبت (128، 192، 256)
encryptor_thumbprintvarbinary(20)بصمة المفتاح الحامي
percent_completerealالنسبة المئوية للاكتمال لتغييرات الحالة
regenerate_datedatetimeتاريخ آخر تدوير للمفتاح

قيم حالة التشفير

الحالةالاسمالوصف
0لا يوجد DEKلا يوجد مفتاح تشفير لقاعدة البيانات
1غير مشفّرالـ DEK موجود لكن التشفير غير مُمكَّن
2قيد التشفيرالتشفير قيد التقدّم
3مشفّرقاعدة البيانات مشفّرة بالكامل
4قيد تغيير المفتاحتدوير المفتاح قيد التقدّم
5قيد فك التشفيرفك التشفير قيد التقدّم
6قيد تغيير الحمايةتغيير الحامي قيد التقدّم

sys.dm_io_virtual_file_stats

وثائق Microsoft ↗

تُرجع إحصائيات الإدخال/الإخراج لملفات البيانات والسجل. مفيدة لمراقبة تأثير TDE على الأداء.

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
العمودنوع البياناتالوصف
num_of_readsbigintعدد عمليات القراءة الصادرة
num_of_writesbigintعدد عمليات الكتابة الصادرة
io_stall_read_msbigintإجمالي وقت انتظار القراءات (مللي ثانية)
io_stall_write_msbigintإجمالي وقت انتظار الكتابات (مللي ثانية)
size_on_disk_bytesbigintحجم الملف على القرص

استعلامات المراقبة الشائعة

فحص سلامة موفّر EKM

فحص سلامة الموفّرSQL
-- 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

عمر المفتاح وحالة التدوير

استعلام عمر المفتاحSQL
-- 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

مراقب تقدّم التشفير

تقدّم التشفيرSQL
-- 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

استعلام لوحة معلومات شامل

يوفّر هذا الاستعلام نظرة عامة كاملة على حالة تشفير TDE لديك، مناسبة للوحات المعلومات وأدوات المراقبة:

لوحة معلومات تشفير كاملةSQL
-- 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
نصيحة
جدوِل تشغيل هذا الاستعلام دوريًا وصدّر النتائج إلى لوحة معلومات للمراقبة أو نظام تنبيه للإدارة الاستباقية.