Вы можете принять некоторые меры предосторожности для защиты базы данных, такие как проектирование безопасной системы, шифрование конфиденциальных активов, а также создание брандмауэра вокруг серверов баз данных. Однако в случае, когда физические носители (такие как диски и ленты с резервными копиями) украдены, злоумышленник может восстановить или подключиться к базе данных и просматривать эти данные. Одним из решений является шифрование конфиденциальных данных в базе данных и защита ключей, используемых для шифрования данных с помощью сертификатов. Это предотвращает использования данных лицами без ключей, но этот вид защиты должен быть спланирован заранее.
Прозрачное шифрование данных (TDE) позволяет шифровать конфиденциальные данные, такие как номера кредитных карт, хранящиеся в таблицах и FileGroups. Зашифрованные данные явно расшифрованы для пользователя базы данных или приложения, которое имеет доступ к данным. TDE помогает защитить данные, хранящиеся на носителе, в случае кражи носителя или файла данных. SQL Server использует аутентификацию, авторизацию и механизмы проверки для защиты данных в базе данных, но не в файлах данных операционной системы, где хранятся данные. Для защиты этих файлов данных в SQL Server предусмотрено TDE. TDE шифрует конфиденциальные данные, хранящихся в файлах данных. Для предотвращения несанкционированной расшифровки, TDE хранит ключи шифрования в модуле защиты внешне по отношению к базе данных.
TDE выполняет в режиме реального времени I/O шифрование и дешифрование файлов данных и журналов. Шифрование использует ключ шифрования (DEK) базы данных, который хранится в базе данных загрузочной записи для доступа во время восстановления. DEK является симметричным ключом, закрепленным с помощью сертификата, хранящегося в базе данных главного сервера, или асимметричным ключом, защищенным модулем Encryption Key Manager (EKM). TDE защищает данные в состоянии покоя, т.е. файлы данных и журналов. Он предоставляет возможность соответствовать множеству законов, нормативных актов и руководящих принципов, разработанных в различных отраслях промышленности. Это позволяет разработчикам программного обеспечения шифровать данные с использованием AES, 3DES алгоритмов шифрования без изменения существующих приложений.
Шифрование файла базы данных выполняется на уровне страницы. Страницы в зашифрованной базе данных шифруются перед тем, как они записываются на диск, и расшифровываются при считывании в память. TDE не увеличивает размер зашифрованной базы данных.
Преимущества использования TDE включают следующие:
- Как администратор по вопросам безопасности, вы можете быть уверены, что в случае кражи носителя для хранения данных или файла данных, любые конфиденциальные сведения будут в безопасности.
- Применение прозрачного шифрования данных (TDE) поможет вам решить вопросы, имеющие отношение к соблюдению мер безопасности.
- Вам не придется создавать некую схему или механизм, который обеспечивал бы запуск шифрования данных для авторизованного пользователя или приложения. Данные из таблиц прозрачно дешифруются для пользователя базы данных и для приложения.
- Пользователям баз данных, как и приложениям, не надо знать о том, что доступные им данные хранятся в зашифрованном виде. Данные прозрачно дешифруются для пользователей базы данных и для приложений.
- Приложениям не требуется какая-либо модификация для обработки зашифрованных данных. Шифрование и дешифрование данных управляется базой данных.
- Операции управления ключом шифрования автоматизированы. Ни пользователь, ни приложение не имеют никакого отношения к управлению ключами шифрования.
Дополнительные сведения о TDE см. в разделе справки Прозрачное шифрование данных (TDE) в библиотеке MSDN.
Для использования TDE, выполните следующие шаги в SQL Server Management Studio.
- Создайте мастер-ключ.
- Создайте или получите сертификат, защищенный мастер-ключом.
- Создайте ключ шифрования базы данных и защитите его сертификатом.
- Установите базу данных, чтобы использовать шифрование.
Example of TDE
You can use the SQL commands below to configure TDE. You can choose the password for the master key, and when backing up the master key, you can choose the folder and file name.
USE master
GO
/* Verify master key */
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%MS_DatabaseMasterKey%'
GO
/* if there are no records found, then it means there was no predefined Master Key.
To create a Master Key, you can execute the below mentioned TSQL code. */
/* Create master key */
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'nisadmin';
GO
/* Backup master key */
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'nisadmin';
GO
BACKUP MASTER KEY TO FILE = 'D:\mssqlbackup\master\masterkey.mk'
ENCRYPTION BY PASSWORD = 'nisadmin';
GO
/* Create Certificate */
CREATE CERTIFICATE nis_cert WITH SUBJECT = 'NIS Server Certificate';
GO
/* Verify Certificate */
SELECT * FROM sys.certificates where [name] = 'nis_cert'
GO
/* Backup certificate */
BACKUP CERTIFICATE nis_cert TO FILE = 'D:\mssqlbackup\master\nis.cer'
WITH PRIVATE KEY (
FILE = 'D:\mssqlbackup\master\nis.pvk',
ENCRYPTION BY PASSWORD = 'nisadmin');
GO
--use nisdb database
USE nisdb
GO
/* Create Encryption key */
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE nis_cert;
GO
/* Encrypt database */
ALTER DATABASE nisdb SET ENCRYPTION ON;
GO
/* Verify Encryption */
SELECT
DB_NAME(database_id) AS DatabaseName
,Encryption_State AS EncryptionState
,key_algorithm AS Algorithm
,key_length AS KeyLength
FROM sys.dm_database_encryption_keys
GO
SELECT
NAME AS DatabaseName
,IS_ENCRYPTED AS IsEncrypted
FROM sys.databases where name ='nisdb'
GO