Transparent Data Encryption / TDE на SQL Server: включение, ключи и сертификаты, бэкапы, восстановление
Прозрачное шифрование данных (TDE) позволяет шифровать файлы данных SQL Server, База данных SQL Azure и Хранилище данных SQL Azure; это называется шифрованием хранящихся данных.
Чтобы защитить базу данных, можно принять ряд мер предосторожности, например спроектировать систему безопасности, проводить шифрование конфиденциальных ресурсов и поместить серверы базы данных под защиту брандмауэра. Однако если будет похищен физический носитель (например, диск или ленты резервной копии), злоумышленник может легко восстановить или подключить базу данных и получить доступ к данным.
Одним из решений может стать шифрование конфиденциальных данных в базе данных и защита ключей, используемых при шифровании, с помощью сертификата. Это не позволит использовать данные ни одному человеку, не имеющему ключей, но такой тип защиты следует планировать заранее.
После прочтения https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-tde и некоторых других ресурсов, я разработал для себя следующий набор шагов, чтобы:
- Включить прозрачное шифрование TDE для базы данных
- Правильно сделать резервные копии ключей шифрования и сертификатов
- Восстановить зашифрованную базу данный из бэкапа
Что надо сделать ПЕРЕД включение шифрования
Перед тем, как включить TDE на базе, ПОЖАЛУЙСТА УБЕДИТЕСЬ, что к базе нет активных подключений. Проще и лучше всего перевести базу в Single User режим. Иначе вы рискуете столкнуться с дедлоками, которые "повесят" весь процесс шифрации и не дадут работать вашему приложению с базой. В самом низху статьи для таких случаев есть специальные команды - проверьте.
Создаем Database Master Key в базе [master]
Этот ключ в дальнейшем будет использован для того, чтобы зашифровать другие ключи и сертификаты в этой базе.
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123QWEasd';
GO
Создаем сертификат, которым будет зашифрован ключ шифрования базы данных: Database Encryption Key (DEK)
Этот сертификат будет использован для шифрации DEK, который будет расположен в шифруемой базе и которым база будет зашифрована
USE master;
GO
CREATE CERTIFICATE MyServerName_SqlTdeMasterKeyCert WITH SUBJECT = 'MyServerName_SqlTdeMasterKeyCert';
GO
Создаем ключ шифрования Database Encryption Key (DEK) в базе данных
USE MyDatabaseName;
GO
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerName_SqlTdeMasterKeyCert;
GO
Запускаем процесс шифрования базы
USE MyDatabaseName;
GO
ALTER DATABASE MyDatabaseName SET ENCRYPTION ON;
GO
Проверяем состояние процесса первоначального шифрования базы
SELECT
db.name,
db.is_encrypted,
dm.encryption_state,
dm.percent_complete,
dm.key_algorithm
FROM sys.databases db JOIN sys.dm_database_encryption_keys dm
ON db.database_id = dm.database_id WHERE db.name = 'MyDatabaseName'
Резервное копирования Database Master Key и сертификата (с закрытым ключом)
Шаги ниже используются для бэкапа Database Master Key и сертификата, чтобы потом при необходимости восстановить их перед тем, как восстанавливать зашифрованную базу данных из бэкапа.
USE master;
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd';
BACKUP MASTER KEY TO FILE = 'd:\temp\MyServerName_DbMasterKey'
ENCRYPTION BY PASSWORD = '123QWEasd2';
GO
USE master;
GO
BACKUP CERTIFICATE MyServerName_SqlTdeMasterKeyCert
TO FILE = 'd:\temp\MyServerName_SqlTdeMasterKeyCert.cer'
WITH PRIVATE KEY
(FILE = 'd:\temp\MyServerName_SqlTdeMasterKey.pvk',
ENCRYPTION BY PASSWORD = '123QWEasd3')
Восстановления Database Master Key и сертификата
Эти шаги выполняютсяна сервере, где зашифрованная база данных будет восстановлена из резервной копии.
USE master;
GO
RESTORE MASTER KEY
FROM FILE = 'd:\temp\MyServerName_DbMasterKey'
DECRYPTION BY PASSWORD = '123QWEasd2' --password to decrypt backup
ENCRYPTION BY PASSWORD = '123QWEasd'; --password to encrypt restored Master Key in the current database.
GO
USE master;
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd';
GO
CREATE CERTIFICATE MyServerName_SqlTdeMasterKeyCert
FROM FILE = 'd:\temp\MyServerName_SqlTdeMasterKeyCert.cer'
WITH PRIVATE KEY (FILE = 'd:\temp\MyServerName_SqlTdeMasterKey.pvk',
DECRYPTION BY PASSWORD = '123QWEasd3')
Восстановление зашифрованной базы данных из бэкапа
USE master
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd';
GO
RESTORE DATABASE MyDatabaseName FROM DISK = N'd:\temp\MyDatabaseNameBackup.bak'
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5;
Траблшутинг при включении TDE
В некоторых случаях, процесс первоначального шифрования базы с помощью TDE может "зависнуть". Возможно - при выполенении пре-шифровального сканирования базы. В таких случаях можно попробовать отключить сканирование и запустить шифрование заново:
DBCC TRACEON(5004)
GO
DBCC TRACEOFF(5004)
GO
ALTER DATABASE MyDatabaseName
SET ENCRYPTION ON
- Просмотров: 4390