النسخ الاحتياطي والاستعادة
النسخ الاحتياطي والاستعادة
النسخ الاحتياطي واستعادة قواعد البيانات المشفّرة بـ TDE عبر مثيلات SQL Server
نظرة عامة
عندما تكون قاعدة البيانات مشفّرة بـ TDE، تكون ملفات النسخ الاحتياطي مشفّرة أيضًا. لاستعادة هذه النسخ الاحتياطية، تحتاج إلى الوصول إلى نفس المفتاح غير المتماثل وبيانات اعتماد DuoKey.
المتطلبات المسبقة
- قاعدة بيانات مشفّرة بـ DuoKey EKM
- تثبيت SQL Server Management Studio (SSMS)
- أذونات مناسبة للنسخ الاحتياطي/الاستعادة
- فهم متطلبات النسخ الاحتياطي لـ TDE
متطلبات النسخ الاحتياطي
لاستعادة النسخ الاحتياطية المشفّرة بـ TDE، تحتاج إلى:
نفس المفتاح غير المتماثل
يجب أن يكون المفتاح الذي حمى DEK قابلًا للوصول
بيانات اعتماد DuoKey
نفس بيانات اعتماد التطبيق كما في الخادم المصدر
مزوّد EKM
يجب تثبيت المزوّد على الخادم الهدف
الوصول الشبكي
اتصال HTTPS بمنصة DuoKey
النسخ الاحتياطي على الخادم الأساسي
التحقق من أن قاعدة البيانات مشفّرة
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 (مشفّرة).
إنشاء نسخة احتياطية
BACKUP DATABASE EmployeeDB
TO DISK = 'C:\Backups\EmployeeDB.bak'
WITH
COMPRESSION,
STATS = 10,
CHECKSUM;
GOالتحقق من النسخة الاحتياطية
RESTORE VERIFYONLY
FROM DISK = 'C:\Backups\EmployeeDB.bak'
WITH CHECKSUM;
GOانقل ملف النسخة الاحتياطية بأمان إلى الخادم الثانوي باستخدام قنوات مشفّرة (SFTP أو SCP أو مشاركة شبكة مشفّرة).
الاستعادة على الخادم الثانوي
المتطلبات المسبقة للخادم الثانوي
متطلبات الخادم الثانوي
تكوين الخادم الثانوي
كوّن الخادم الثانوي بنفس بيانات اعتماد الخادم الأساسي:
-- 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فتح المفتاح الموجود
افتح المفتاح غير المتماثل الموجود من DuoKey:
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 لأن ذلك سينشئ مفتاحًا مختلفًا.
إنشاء بيانات اعتماد المفتاح
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استعادة قاعدة البيانات
RESTORE DATABASE EmployeeDB
FROM DISK = 'C:\Backups\EmployeeDB.bak'
WITH REPLACE;
GOيستبدل الخيار WITH REPLACE قاعدة البيانات الموجودة إن وُجدت.
التحقق من الاستعادة
-- 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؛ خزّنها في مواقع آمنة خاضعة للتحكم بالوصول
خارج الموقع
احتفظ بنسخ خارج الموقع للتعافي من الكوارث
التحقق
تحقق دائمًا من النسخ الاحتياطية بعد إنشائها
مهمة النسخ الاحتياطي التلقائي
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سيناريوهات الاستعادة
استكشاف الأخطاء وإصلاحها
أوامر معلومات النسخ الاحتياطي
-- 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