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

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

ينطبق على:
SQL Server 2016+قواعد بيانات مشفّرة بـ TDEيتطلب Sysadmin

نظرة عامة​

يُعد تدوير المفاتيح من أفضل الممارسات الأمنية التي تتضمن استبدال مفاتيح التشفير دوريًا. في DuoKey SQL EKM، يوجد نوعان من المفاتيح يمكن تدويرهما:

المتطلبات المسبقة

  • قاعدة بيانات مشفّرة بـ DuoKey EKM
  • SQL Server مكوّن مع مزوّد DuoKey EKM
  • تثبيت SQL Server Management Studio (SSMS)
  • امتيازات Sysadmin على SQL Server
  • فهم التسلسل الهرمي للمفاتيح في TDE

أنواع المفاتيح وسيناريوهات التدوير​

مفتاح التشفير الرئيسي (MEK)

مفتاح غير متماثل مخزّن في منصة DuoKey

مفتاح تشفير قاعدة البيانات (DEK)

مفتاح متماثل يشفّر قاعدة البيانات

السيناريوما الذي يُدوَّرالتعقيدنوع العملية
تدوير DEK فقطمفتاح تشفير قاعدة البياناتمنخفضمتصل، روتيني
تدوير MEK فقطالمفتاح غير المتماثل (MEK)متوسطمخطّط، منسّق
التدوير الكاملكل من DEK و MEKعالٍمخطّط، منسّق
تدوير المفتاح الرئيسي عملية مخطّطة

تدوير المفتاح الرئيسي (غير المتماثل) ليس مهمة روتينية "بلا توقف". يجب التخطيط لها وتنسيقها: اربط المفتاح الرئيسي الجديد، وأعد تشفير كل DEK تابع بالمفتاح الجديد، واحتفظ بالمفتاح الرئيسي القديم حتى يُرحَّل كل قاعدة بيانات تابعة وكل نسخة احتياطية تعتمد عليه. لا تحذف مفتاحاً رئيسياً مربوطاً أو تدوّره أو تنقله بينما لا تزال أي قاعدة بيانات TDE أو نسخة احتياطية تعتمد عليه، وإلا ستنتقل قاعدة البيانات إلى حالة مشبوهة/غير متصلة لأنه لم يعد بالإمكان فك تغليف DEK الخاص بها.

لماذا تدوير المفاتيح؟​

الحد من التعرّض

يقلل خطر اختراق المفاتيح بمرور الوقت

الامتثال

تلبية المتطلبات التنظيمية (PCI-DSS، HIPAA)

الاستجابة للحوادث

جزء من إجراءات حوادث الأمان

أفضل ممارسة

ممارسة أمنية معيارية في الصناعة

جدول التدوير الموصى به​

تصنيف البياناتفترة التدوير
البيانات الحرجةكل 3-6 أشهر
البيانات الحساسةكل 6-12 شهرًا
البيانات القياسيةسنويًا
قائم على الحوادثفورًا عند الاشتباه في الاختراق

تدوير DEK فقط​

أبسط تدوير - يعيد توليد مفتاح تشفير قاعدة البيانات مع الاحتفاظ بنفس MEK.

1

التحقق من الحالة الحالية

التحقق من حالة التشفيرSQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  percent_complete,
  key_algorithm,
  key_length
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO
2

إعادة توليد DEK

إعادة توليد مفتاح تشفير قاعدة البياناتSQL
USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
REGENERATE
WITH ALGORITHM = AES_256;
GO
3

مراقبة التقدّم

مراقبة إعادة التوليدSQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  CASE encryption_state
      WHEN 4 THEN 'Key change in progress'
      WHEN 3 THEN 'Key change complete'
      ELSE 'Unexpected state'
  END AS Status,
  percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO
ملاحظة

أثناء تدوير DEK، تشير encryption_state = 4 إلى أن التدوير قيد التقدّم.

التدوير الكامل للمفاتيح (MEK + DEK)​

أكمل تدوير المفاتيح بإنشاء مفتاح غير متماثل جديد وتدوير DEK.

1

إنشاء مفتاح غير متماثل جديد

إنشاء مفتاح جديد في DuoKeySQL
USE master;
CREATE ASYMMETRIC KEY SQL_EKM_Key_Rotated
FROM PROVIDER DuoKeyProvider
WITH ALGORITHM = RSA_2048,
PROVIDER_KEY_NAME = 'SQL_EKM_Key_Rotated',
CREATION_DISPOSITION = CREATE_NEW;
GO
2

إنشاء بيانات اعتماد للمفتاح الجديد

إنشاء بيانات اعتماد المفتاحSQL
CREATE CREDENTIAL SQL_EKM_Key_Rotated_CRED
WITH IDENTITY = '<client_id>',
SECRET = '<enrolled-agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GO
3

إنشاء تسجيل دخول للمفتاح الجديد

إنشاء وربط تسجيل الدخولSQL
CREATE LOGIN SQL_EKM_Key_Rotated_LOGIN
FROM ASYMMETRIC KEY SQL_EKM_Key_Rotated;
GO

ALTER LOGIN SQL_EKM_Key_Rotated_LOGIN
ADD CREDENTIAL SQL_EKM_Key_Rotated_CRED;
GO
4

تمكين Encrypt في DuoKey

تحذير

يجب تمكين عملية التشفير في DuoKey قبل المتابعة.

  1. سجّل الدخول إلى DuoKey Cockpit
  2. انتقل إلى قسم Keys
  3. ابحث عن SQL_EKM_Key_Rotated
  4. فعّل عملية Encrypt
  5. احفظ التغييرات
5

إعادة تشفير DEK بالمفتاح الرئيسي الجديد

اربط DEK الموجود بالمفتاح غير المتماثل الجديد. يُعاد تشفير DEK (يُعاد تغليفه) بالمفتاح الرئيسي الجديد؛ وتبقى خوارزميته AES_256 دون تغيير.

تغيير حماية DEKSQL
USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key_Rotated;
GO
مهم

لا يوجد تغيير وسيط للخوارزمية. يبقى DEK بخوارزمية AES_256 طوال العملية — يتغيّر المفتاح الرئيسي الذي يحميه فقط. احتفظ بالمفتاح الرئيسي السابق حتى تُرحَّل كل قاعدة بيانات تابعة وكل نسخة احتياطية إلى المفتاح الجديد.

نصيحة

لإصدار DEK جديد أيضًا تحت المفتاح الرئيسي الجديد، شغّل ALTER DATABASE EmployeeDB ENCRYPTION KEY REGENERATE WITH ALGORITHM = AES_256; بعد اكتمال إعادة التشفير.

6

التحقق من التدوير

التحقق من تدوير المفتاحSQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  encryptor_thumbprint,
  encryptor_type
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO

-- Compare with new key thumbprint
USE master;
SELECT
  name AS AsymmetricKeyName,
  thumbprint,
  algorithm_desc
FROM sys.asymmetric_keys
WHERE name = 'SQL_EKM_Key_Rotated';
GO

مهام ما بعد التدوير​

اختبار عمليات قاعدة البيانات​

التحقق من الوصول إلى قاعدة البياناتSQL
-- Test read access
USE EmployeeDB;
SELECT TOP 10 * FROM Employees;
GO

-- Test write access
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary)
VALUES (999, 'Test', 'User', 50000.00);
GO

-- Verify and cleanup
SELECT * FROM Employees WHERE EmployeeID = 999;
DELETE FROM Employees WHERE EmployeeID = 999;
GO

إنشاء نسخة احتياطية جديدة​

مهم

أنشئ دائمًا نسخة احتياطية لقواعد البيانات فور تدوير المفاتيح.

النسخ الاحتياطي بعد التدويرSQL
BACKUP DATABASE EmployeeDB
TO DISK = 'C:\Backups\EmployeeDB_AfterRotation.bak'
WITH
  COMPRESSION,
  CHECKSUM,
  STATS = 10;
GO

التدوير التلقائي للمفاتيح​

مهمة SQL Agent لتدوير DEK ربع السنويSQL
USE msdb;
GO

EXEC dbo.sp_add_job
  @job_name = N'QuarterlyKeyRotation',
  @enabled = 1,
  @description = N'Rotates DEK for encrypted databases';
GO

EXEC dbo.sp_add_jobstep
  @job_name = N'QuarterlyKeyRotation',
  @step_name = N'RotateDEK',
  @subsystem = N'TSQL',
  @command = N'
      USE EmployeeDB;
      ALTER DATABASE ENCRYPTION KEY
      REGENERATE WITH ALGORITHM = AES_256;

      -- Wait for completion
      WAITFOR DELAY ''00:01:00'';

      -- Backup after rotation
      BACKUP DATABASE EmployeeDB
      TO DISK = N''C:\Backups\EmployeeDB_PostRotation.bak''
      WITH COMPRESSION;',
  @retry_attempts = 2,
  @retry_interval = 5;
GO

EXEC dbo.sp_add_schedule
  @schedule_name = N'Quarterly',
  @freq_type = 16, -- Monthly
  @freq_interval = 1,
  @freq_recurrence_factor = 3; -- Every 3 months
GO

EXEC dbo.sp_attach_schedule
  @job_name = N'QuarterlyKeyRotation',
  @schedule_name = N'Quarterly';
GO
تنبيه

يجب اختبار التدوير التلقائي ومراقبته بدقة. ضمّن دائمًا معالجة الأخطاء والإشعارات.

التدوير الطارئ للمفاتيح​

تحذير

في حالة الاشتباه في اختراق المفتاح، نفّذ التدوير الطارئ على الفور.

الإجراءات الفورية​

  1. عزل الأنظمة: قيّد الوصول إلى الأنظمة المتأثرة
  2. إبلاغ فريق الأمان: نبّه أمن المعلومات
  3. تقييم التأثير: حدد نطاق الاختراق المحتمل
  4. تنفيذ التدوير: نفّذ تدويرًا معجّلًا
برنامج نصي للتدوير الطارئSQL
-- 1. Create emergency key
USE master;
CREATE ASYMMETRIC KEY Emergency_Rotation_Key
FROM PROVIDER DuoKeyProvider
WITH ALGORITHM = RSA_2048,
PROVIDER_KEY_NAME = 'Emergency_Rotation_Key',
CREATION_DISPOSITION = CREATE_NEW;
GO

-- 2. Configure credentials (follow standard steps)
-- 3. Enable encrypt operation in DuoKey
-- 4. Re-encrypt the DEK by the emergency master key
--    (DEK stays AES_256 - no intermediate algorithm change)

USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER ASYMMETRIC KEY Emergency_Rotation_Key;
GO

-- 5. Optionally issue a fresh DEK under the new master
ALTER DATABASE ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_256;
GO

-- 6. Verify and backup
SELECT * FROM sys.dm_database_encryption_keys;
GO

BACKUP DATABASE EmployeeDB
TO DISK = 'C:\Backups\EmergencyRotation.bak'
WITH COMPRESSION;
GO

استكشاف الأخطاء وإصلاحها​

أفضل الممارسات​

قائمة تحقق تدوير المفاتيح

النسخ الاحتياطي أولًاأنشئ نسخة احتياطية دائمًا قبل التدوير
الاختبار في بيئة التطويراختبر التدوير في بيئة غير إنتاجية أولًا
مراقبة التقدّمراقب encryption_state و percent_complete
توثيق التغييراتسجّل التدوير في إدارة التغيير

الخطوات التالية​