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

النسخ الاحتياطي والاستعادة

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

نظرة عامة​

عندما تكون قاعدة البيانات مشفّرة بـ TDE، تكون ملفات النسخ الاحتياطي مشفّرة أيضًا. لاستعادة هذه النسخ الاحتياطية، تحتاج إلى الوصول إلى نفس المفتاح غير المتماثل وبيانات اعتماد DuoKey.

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

  • قاعدة بيانات مشفّرة بـ DuoKey EKM
  • تثبيت SQL Server Management Studio (SSMS)
  • أذونات مناسبة للنسخ الاحتياطي/الاستعادة
  • فهم متطلبات النسخ الاحتياطي لـ TDE

متطلبات النسخ الاحتياطي​

لاستعادة النسخ الاحتياطية المشفّرة بـ TDE، تحتاج إلى:

نفس المفتاح غير المتماثل

يجب أن يكون المفتاح الذي حمى DEK قابلًا للوصول

بيانات اعتماد DuoKey

نفس بيانات اعتماد التطبيق كما في الخادم المصدر

مزوّد EKM

يجب تثبيت المزوّد على الخادم الهدف

الوصول الشبكي

اتصال HTTPS بمنصة DuoKey

النسخ الاحتياطي على الخادم الأساسي​

1

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

التحقق من حالة التشفيرSQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  CASE encryption_state
      WHEN 3 THEN 'Encrypted - Ready for backup'
      ELSE 'Not ready - State: ' + CAST(encryption_state AS VARCHAR)
  END AS Status
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO
تحذير

تابع النسخ الاحتياطي فقط عندما تكون encryption_state = 3 (مشفّرة).

2

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

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

التحقق من النسخة الاحتياطية

التحقق من سلامة النسخة الاحتياطيةSQL
RESTORE VERIFYONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak'
WITH CHECKSUM;
GO
نصيحة

انقل ملف النسخة الاحتياطية بأمان إلى الخادم الثانوي باستخدام قنوات مشفّرة (SFTP أو SCP أو مشاركة شبكة مشفّرة).

الاستعادة على الخادم الثانوي​

المتطلبات المسبقة للخادم الثانوي​

متطلبات الخادم الثانوي

نفس تطبيق SQL EKMأو ملف إعداد مشترك من الخادم الأساسي
مزوّد EKM مُثبّتومكوّن بشكل صحيح
الوصول إلى نفس الخزنةالوصول إلى نفس خزنة DuoKey والمفاتيح
الاتصال الشبكيHTTPS بمنصة DuoKey
1

تكوين الخادم الثانوي

كوّن الخادم الثانوي بنفس بيانات اعتماد الخادم الأساسي:

تكوين EKM على الخادم الثانويSQL
-- Enable EKM
sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO
sp_configure 'EKM provider enabled', 1;
GO
RECONFIGURE;
GO

-- Create cryptographic provider
CREATE CRYPTOGRAPHIC PROVIDER DuoKeyProvider
FROM FILE = 'C:\Program Files\DKE\EKM\dke_ekm_provider.dll';
GO

-- Create credentials (use same values as primary)
CREATE CREDENTIAL DuoKeyCredential
WITH IDENTITY = '<client_id>',
SECRET = '<enrolled-agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GO

-- Map credentials to login
ALTER LOGIN [sa]
ADD CREDENTIAL DuoKeyCredential;
GO
2

فتح المفتاح الموجود

افتح المفتاح غير المتماثل الموجود من DuoKey:

فتح مفتاح غير متماثل موجودSQL
USE master;
CREATE ASYMMETRIC KEY SQL_EKM_Key
FROM PROVIDER DuoKeyProvider
WITH
  PROVIDER_KEY_NAME = 'SQL_EKM_Key',
  CREATION_DISPOSITION = OPEN_EXISTING;
GO
مهم

استخدم CREATION_DISPOSITION = OPEN_EXISTING لفتح المفتاح الموجود من DuoKey. لا تستخدم CREATE_NEW لأن ذلك سينشئ مفتاحًا مختلفًا.

3

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

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

CREATE LOGIN SQL_EKM_Key_Login
FROM ASYMMETRIC KEY SQL_EKM_Key;
GO

ALTER LOGIN SQL_EKM_Key_Login
ADD CREDENTIAL SQL_EKM_Key_Cred;
GO
4

استعادة قاعدة البيانات

استعادة قاعدة بيانات مشفّرةSQL
RESTORE DATABASE EmployeeDB
FROM DISK = 'C:\Backups\EmployeeDB.bak'
WITH REPLACE;
GO
نصيحة

يستبدل الخيار WITH REPLACE قاعدة البيانات الموجودة إن وُجدت.

5

التحقق من الاستعادة

التحقق من قاعدة البيانات المُستعادةSQL
-- Check database status
SELECT
  name,
  state_desc,
  is_encrypted,
  recovery_model_desc
FROM sys.databases
WHERE name = 'EmployeeDB';
GO

-- Verify encryption is intact
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO

-- Test data access
USE EmployeeDB;
SELECT TOP 10 * FROM Employees;
GO

أفضل ممارسات النسخ الاحتياطي​

الاستراتيجية

نسخ احتياطية كاملة أسبوعيًا، تفاضلية يوميًا، نسخ السجلات كل ساعة

التخزين

النسخ الاحتياطية مشفّرة بـ TDE؛ خزّنها في مواقع آمنة خاضعة للتحكم بالوصول

خارج الموقع

احتفظ بنسخ خارج الموقع للتعافي من الكوارث

التحقق

تحقق دائمًا من النسخ الاحتياطية بعد إنشائها

مهمة النسخ الاحتياطي التلقائي​

إنشاء مهمة نسخ احتياطي في SQL AgentSQL
USE msdb;
GO

EXEC dbo.sp_add_job
  @job_name = N'DailyBackup_EncryptedDBs',
  @enabled = 1;
GO

EXEC dbo.sp_add_jobstep
  @job_name = N'DailyBackup_EncryptedDBs',
  @step_name = N'BackupStep',
  @subsystem = N'TSQL',
  @command = N'
      BACKUP DATABASE [EmployeeDB]
      TO DISK = N''C:\Backups\EmployeeDB_'' +
                CONVERT(VARCHAR(8), GETDATE(), 112) + ''.bak''
      WITH COMPRESSION, CHECKSUM;',
  @retry_attempts = 3,
  @retry_interval = 5;
GO

EXEC dbo.sp_add_schedule
  @schedule_name = N'DailyAt2AM',
  @freq_type = 4, -- Daily
  @freq_interval = 1,
  @active_start_time = 020000; -- 2:00 AM
GO

EXEC dbo.sp_attach_schedule
  @job_name = N'DailyBackup_EncryptedDBs',
  @schedule_name = N'DailyAt2AM';
GO

EXEC dbo.sp_add_jobserver
  @job_name = N'DailyBackup_EncryptedDBs';
GO

سيناريوهات الاستعادة​

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

أوامر معلومات النسخ الاحتياطي​

عرض محتويات النسخة الاحتياطيةSQL
-- View files in backup
RESTORE FILELISTONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak';
GO

-- View backup metadata
RESTORE HEADERONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak';
GO

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