Transparent Data Encryption / TDE на SQL Server: включение, ключи и сертификаты, бэкапы, восстановление

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 для Microsoft SQL Server

 

Что надо сделать ПЕРЕД включение шифрования

Перед тем, как включить 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

 

 

Метки: ms sql server (ru)

ПечатьE-mail

Добавить комментарий


Защитный код
Обновить