تشفير قاعدة البيانات
تشفير قاعدة البيانات
تفعيل تشفير البيانات الشفاف (TDE) باستخدام DuoKey EKM
نظرة عامة
يشفّر تشفير البيانات الشفاف (TDE) تخزين قاعدة بيانات بأكملها باستخدام مفتاح تشفير قاعدة البيانات (DEK). مع DuoKey EKM، يكون هذا المفتاح DEK محميًا بمفتاح غير متماثل مخزّن في منصة DuoKey السحابية، مما يوفّر طبقة أمان إضافية.
المتطلبات المسبقة
- SQL Server مكوّن مع مزوّد DuoKey EKM
- مفتاح غير متماثل مُنشأ والتشفير مُمكّن في DuoKey
- تثبيت SQL Server Management Studio (SSMS)
- امتيازات Sysadmin على SQL Server
التسلسل الهرمي للتشفير
منصة DuoKey السحابية
مفتاح التشفير الرئيسي (MEK)
محمي بواسطة MPCSQL Server (قاعدة بيانات master)
مفتاح غير متماثل (EKM)
RSA-2048قاعدة بيانات المستخدم
مفتاح تشفير قاعدة البيانات (DEK)
AES-256ملفات البيانات
.mdf, .ndf, .ldf
مشفّرة أثناء التخزينإنشاء قاعدة البيانات وتفعيل TDE
إنشاء أو تحديد قاعدة بيانات
أنشئ قاعدة بيانات جديدة أو استخدم قاعدة موجودة:
-- Create a new database
CREATE DATABASE EmployeeDB;
GO
USE EmployeeDB;
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(128),
LastName VARCHAR(128),
Salary DECIMAL(10, 2),
SSN VARCHAR(11)
);
GOإنشاء مفتاح تشفير قاعدة البيانات
أنشئ DEK محميًا بالمفتاح غير المتماثل في DuoKey:
USE EmployeeDB;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
GO| الخوارزمية | حجم المفتاح | التوصية |
|---|---|---|
| AES_128 | 128-بت | أمان جيد |
| AES_192 | 192-بت | أمان أفضل |
| AES_256 | 256-بت | موصى به - الأقوى |
| Triple DES | 168-بت | غير موصى به |
استخدم AES_256 للحصول على أقوى تشفير. فهو يوفّر أمانًا ممتازًا مع تأثير ضئيل على الأداء في الأجهزة الحديثة.
تفعيل التشفير
فعّل TDE على قاعدة البيانات:
ALTER DATABASE EmployeeDB
SET ENCRYPTION ON;
GOيُنفَّذ التشفير بشكل غير متزامن. بالنسبة لقواعد البيانات الكبيرة، قد تستغرق هذه العملية بعض الوقت.
مراقبة تقدّم التشفير
SELECT
DB_NAME(database_id) AS DatabaseName,
encryption_state,
CASE encryption_state
WHEN 0 THEN 'No database encryption key present'
WHEN 1 THEN 'Unencrypted'
WHEN 2 THEN 'Encryption in progress'
WHEN 3 THEN 'Encrypted'
WHEN 4 THEN 'Key change in progress'
WHEN 5 THEN 'Decryption in progress'
WHEN 6 THEN 'Protection change in progress'
END AS Status,
percent_complete,
encryptor_type
FROM sys.dm_database_encryption_keys;
GOمرجع حالات التشفير
| الحالة | القيمة | الوصف | الإجراء المطلوب |
|---|---|---|---|
| 0 | لا يوجد DEK | لا يوجد مفتاح تشفير لقاعدة البيانات | إنشاء DEK باستخدام CREATE DATABASE ENCRYPTION KEY |
| 1 | غير مشفّر | مفتاح DEK موجود لكن التشفير غير مُفعَّل | التفعيل باستخدام ALTER DATABASE SET ENCRYPTION ON |
| 2 | قيد التشفير | التشفير قيد التقدّم | انتظر اكتمال العملية، وراقب percent_complete |
| 3 | مشفَّرة | قاعدة البيانات مشفَّرة بالكامل | لا شيء - تشغيل طبيعي |
| 4 | تغيير المفتاح | تدوير المفتاح قيد التنفيذ | انتظر اكتمال العملية |
| 5 | قيد فك التشفير | فك التشفير قيد التنفيذ | انتظر اكتمال العملية |
| 6 | تغيير الحماية | تغيير أداة الحماية قيد التنفيذ | انتظر اكتمال العملية |
التحقق من التشفير
SELECT
d.name AS DatabaseName,
d.is_encrypted,
dek.encryption_state,
dek.percent_complete,
dek.key_algorithm,
dek.key_length
FROM sys.databases d
LEFT JOIN sys.dm_database_encryption_keys dek
ON d.database_id = dek.database_id
WHERE d.name = 'EmployeeDB';
GOUSE master;
SELECT
ak.name AS AsymmetricKeyName,
ak.algorithm_desc,
ak.key_length,
cp.name AS CryptoProviderName
FROM sys.asymmetric_keys ak
INNER JOIN sys.cryptographic_providers cp
ON ak.provider_id = cp.provider_id;
GOاختبار عمليات البيانات
بعد تفعيل التشفير، اختبر أن عمليات البيانات تعمل بشفافية:
USE EmployeeDB;
-- Insert test data
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, SSN)
VALUES
(1, 'John', 'Doe', 75000.00, '123-45-6789'),
(2, 'Jane', 'Smith', 82000.00, '987-65-4321'),
(3, 'Bob', 'Johnson', 68000.00, '555-12-3456');
GO
-- Query data (works transparently)
SELECT * FROM Employees;
GOتُشفّر البيانات تلقائيًا أثناء السكون مع بقائها شفافة للتطبيقات.
اعتبارات الأداء
التشفير الأولي
- وحدة المعالجة المركزية: زيادة معتدلة
- الإدخال/الإخراج: نشاط كبير
- السرعة: ~1-5 جيجابايت/دقيقة
- تبقى قاعدة البيانات متصلة
التأثير المستمر
- عمليات القراءة: 3-5% عبء إضافي
- عمليات الكتابة: 5-10% عبء إضافي
- استخدام وحدة المعالجة المركزية: زيادة 1-3%
- AES-NI يقلل التأثير
- جدول التشفير الأولي خلال نوافذ الصيانة
- راقب وحدة المعالجة المركزية والإدخال/الإخراج أثناء التشفير
- استخدم معالجات تدعم AES-NI للحصول على أفضل أداء
- تأكد من وجود مساحة كافية في tempdb
تشفير قواعد بيانات متعددة
استخدم برنامجًا نصيًا لتشفير قواعد بيانات متعددة دفعة واحدة:
DECLARE @dbname NVARCHAR(128);
DECLARE @sql NVARCHAR(MAX);
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
AND is_encrypted = 0;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'USE [' + @dbname + '];
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
ALTER DATABASE [' + @dbname + '] SET ENCRYPTION ON;';
EXEC sp_executesql @sql;
PRINT 'Encrypted database: ' + @dbname;
FETCH NEXT FROM db_cursor INTO @dbname;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
GOتعطيل التشفير
سيؤدي تعطيل التشفير إلى فك تشفير قاعدة البيانات، وهو ما قد يستغرق وقتًا كبيرًا لقواعد البيانات الكبيرة.
-- Disable encryption
ALTER DATABASE EmployeeDB
SET ENCRYPTION OFF;
GO
-- Monitor decryption progress
SELECT
DB_NAME(database_id) AS DatabaseName,
encryption_state,
percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO
-- After decryption completes (encryption_state = 1)
USE EmployeeDB;
DROP DATABASE ENCRYPTION KEY;
GOأفضل الممارسات
الأمان
شفّر قواعد البيانات مبكرًا، احمِ مفاتيح النسخ الاحتياطي، دقّق الوصول إلى المفاتيح
العمليات
اختبر قبل الإنتاج، راقب الأداء، خطط للنمو
الصيانة
نسخ احتياطية منتظمة، اختبر الاستعادات، أبقِ DuoKey قابلًا للوصول