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
Метки: ms sql server (ru)