Шифрование резервных копий (Backup Encryption) в SQL Server
Необходимость соблюдения требований информационной безопасности (ИБ) и защита от утечек данных:
- Риск кражи файлов бэкапов (
.bak) при передаче по открытым каналам связи или краже съемных носителей; - Требование стандартов PCI-DSS / 152-ФЗ по обязательному криптографическому шифрованию резервных копий баз персональных данных;
- Ошибка
Cannot find the certificate used for encrypting the backup (Error 33111)при восстановлении на другом сервере.
1. Создание главного ключа базы данных (Master Key) и сертификата
Все операции выполняются в системной базе master:
USE [master];
GO
-- 1. Создание Master Key экземпляра (если он еще не создан)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongMasterKeyPassword!123';
GO
-- 2. Создание сертификата шифрования резервных копий
CREATE CERTIFICATE [MSSQL_Backup_Cert]
WITH SUBJECT = 'Certificate for Production Database Backup Encryption',
EXPIRY_DATE = '2099-12-31';
GO2. Обязательный экспорт сертификата и приватного ключа в безопасное место
Без экспортированного сертификата и ключа восстановить зашифрованный бэкап в случае гибели сервера будет невозможно:
BACKUP CERTIFICATE [MSSQL_Backup_Cert]
TO FILE = 'E:\SecureKeys\MSSQL_Backup_Cert.cer'
WITH PRIVATE KEY (
FILE = 'E:\SecureKeys\MSSQL_Backup_Cert.pvk',
ENCRYPTION BY PASSWORD = 'StrongPrivateKeyPassword!456'
);
GO3. Создание зашифрованного бэкапа
Используйте стойкий алгоритм шифрования AES_256:
BACKUP DATABASE [ERP_1C]
TO DISK = N'E:\Backup\ERP_1C_Encrypted.bak'
WITH ENCRYPTION (
ALGORITHM = AES_256,
SERVER CERTIFICATE = [MSSQL_Backup_Cert]
),
COMPRESSION, CHECKSUM, STATS = 10;
GO4. Импорт сертификата на целевой сервер для восстановления
USE [master];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'NewServerMasterKeyPassword!123';
GO
CREATE CERTIFICATE [MSSQL_Backup_Cert]
FROM FILE = 'E:\SecureKeys\MSSQL_Backup_Cert.cer'
WITH PRIVATE KEY (
FILE = 'E:\SecureKeys\MSSQL_Backup_Cert.pvk',
DECRYPTION BY PASSWORD = 'StrongPrivateKeyPassword!456'
);
GO Частые вопросы (FAQ)
Можно ли зашифровать бэкап в редакции SQL Server Standard?
Да, начиная с SQL Server 2014, шифрование резервных копий (Backup Encryption) поддерживается как в Enterprise, так и в Standard редакции.
Что произойдет, если истечет срок действия сертификата (EXPIRY_DATE)?
Истечение срока действия сертификата не блокирует восстановление уже существующих бэкапов. Однако создание новых бэкапов с просроченным сертификатом будет запрещено.
Влияет ли шифрование бэкапа на возможность его сжатия (Compression)?
При использовании директив WITH ENCRYPTION и WITH COMPRESSION сначала выполняется сжатие данных, а затем шифрование. Это обеспечивает отличный коэффициент сжатия без потери безопасности.
Как проверить, зашифрован ли файл бэкапа без его восстановления?
Выполните команду RESTORE HEADERONLY FROM DISK = N'path\file.bak'. Столбец key_algorithm покажет используемый алгоритм (например, AES_256), а encryptor_thumbprint — отпечаток сертификата.