راهنمای جامع پیاده‌سازی رمزنگاری بکاپ‌ها در SQL Server با استفاده از Master Key و Certificate

مقدمه

امنیت اطلاعات در دنیای امروز یکی از مهم‌ترین دغدغه‌های سازمان‌ها محسوب می‌شود. یکی از جنبه‌های حیاتی امنیت داده‌ها، محافظت از فایل‌های پشتیبان (Backup) بانک‌های اطلاعاتی است. در این مقاله، به صورت گام‌به‌گام و کاملاً عملی، فرآیند پیاده‌سازی رمزنگاری بکاپ‌ها در SQL Server را با استفاده از Master Key و Certificate آموزش خواهیم داد.

چرا رمزنگاری بکاپ‌ها ضروری است:

قبل از ورود به جزئیات فنی، بیایید به این سؤال پاسخ دهیم که چرا باید بکاپ‌های خود را رمزنگاری کنیم:

  • حفاظت از داده‌های حساس در برابر دسترسی غیرمجاز
  • تطابق با الزامات قانونی مانند GDPR، HIPAA و استانداردهای بانکی
  • امنیت در هنگام انتقال فایل‌های بکاپ به مراکز دیگر
  • جلوگیری از سوءاستفاده در صورت گم شدن یا سرقت رسانه‌های بکاپ

پیش‌نیازها

  • دسترسی به SQL Server با نسخه ۲۰۱۴ یا بالاتر (ترجیحاً)
  • دسترسی سطح بالای ادمینی (sysadmin) روی سرورهای هدف
  • مسیرهای ذخیره‌سازی مشخص برای فایل‌های کلید و گواهی

مرحله اول: ایجاد Master Key در سرورهای Primary

 Master Key اولین لایه از سلسله‌مراتب رمزنگاری در SQL Server است. این کلید برای محافظت از کلیدهای خصوصی و گواهی‌ها استفاده می‌شود.

اسکریپت ایجاد Master Key:

USE MASTER ;

GO

-- بررسی وجود Master Key قبل از ایجاد

IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name LIKE '%Master%')

BEGIN

    CREATE MASTER KEY

    ENCRYPTION BY PASSWORD = 'Password';

    PRINT 'Master Key با موفقیت ایجاد شد.';

END

ELSE

BEGIN

    PRINT 'Master Key از قبل وجود دارد.';

END

GO

نکته مهم:  پسورد تعیین شده برای Master Key را در یک مکان امن (ترجیحاً مدیریت پسورد سازمانی) ثبت کنید. در این مثال، پسورد Password  از فایل FinalPassword دریافت شده است.

مرحله دوم ایجاد Certificate در سرورهای Primary:

پس از ایجاد Master Key، نوبت به ایجاد Certificate می‌رسد Certificateها در SQL Server برای رمزنگاری داده‌ها و بکاپ‌ها استفاده می‌شوند.

اسکریپت ایجاد Certificate:

USE MASTER ;

GO

-- حذف Certificate در صورت وجود (اختیاری - با احتیاط استفاده شود)

-- IF EXISTS (SELECT * FROM sys.certificates WHERE name = 'smGK_BackupCertificate')

-- DROP CERTIFICATE smGK_BackupCertificate;

-- GO

-- ایجاد Certificate جدید

CREATE CERTIFICATE smGK_BackupCertificate

WITH SUBJECT = 'smGK_BackupCertificate',

EXPIRY_DATE = '2030-12-31';  -- تاریخ انقضای بلندمدت برای جلوگیری از مشکلات دوره‌ای

GO

PRINT 'Certificate با نام smGK_BackupCertificate با موفقیت ایجاد شد.';

GO

توضیحات پارامترها:

  • SUBJECT : توضیحی درباره کاربرد Certificate  ( می‌تواند هر رشته متنی باشد )
  • EXPIRY_DAT : تاریخ انقضا (پیشنهاد می‌شود حداقل ۵ سال در نظر گرفته شود)

مرحله سوم بکاپ‌گیری از Certificate و کلید خصوصی :

برای استفاده از Certificate در سرورهای دیگر (مانند سرورهای Secondary یا Disaster Recovery) ، باید از آن بکاپ بگیریم و فایل‌ها را در مسیر امنی نگهداری کنیم.

اسکریپت بکاپ‌گیری از Certificate:

USE MASTER;

GO

-- تعریف مسیرهای ذخیره‌سازی

DECLARE @CertPath NVARCHAR(500) = N'E:\GKKeys\';

DECLARE @CertFile NVARCHAR(500) = @CertPath + N'SMGK_BACKUP_CERTIFICATE.cer';

DECLARE @KeyFile NVARCHAR(500) = @CertPath + N'SMGK_BACKUP_CERTIFICATE_PRIVATE_KEY.key';

DECLARE @KeyPassword NVARCHAR(100) = N'Password';

-- بررسی وجود پوشه مقصد (در محیط واقعی باید از قبل ایجاد شده باشد)

PRINT 'شروع فرآیند بکاپ‌گیری از Certificate...';

BACKUP CERTIFICATE smGK_BackuCertificate

TO FILE = @CertFile

WITH PRIVATE KEY

(

    FILE = @KeyFile,

    ENCRYPTION BY PASSWORD = @KeyPassword

);

 

PRINT 'بکاپ Certificate با موفقیت ایجاد شد.';

PRINT 'مسیر فایل Certificate: ' + @CertFile;

PRINT 'مسیر فایل کلید خصوصی: ' + @KeyFile;

GO

توصیه‌های امنیتی مهم:

  1. مسیر E:\GKKeys\ باید از قبل ایجاد شده باشد
  2. دسترسی به این پوشه فقط برای ادمین‌های سیستم مجاز باشد
  3. از فایل‌های ایجاد شده، بکاپ جداگانه در محیطی امن (مانند Tape یا Cloud Storage) تهیه شود
  4. پسورد vrHz93Gp5Vca362N  نیز مانند پسورد Master Key باید در فایل FinalPassword نگهداری شود

مرحله چهارم تکرار فرآیند روی تمام سرورهای Primary :

مراحل یک تا سه باید روی تمامی سرورهای Primary که قرار است بکاپ‌های آنها رمزنگاری شود، اجرا گردد .