Использование Соединителя SQL Server с компонентами шифрования SQL
Область применения: SQL Server
Распространенные действия шифрования SQL Server с использованием асимметричного ключа, защищенного Azure Key Vault, включают следующие три области.
Прозрачное шифрование данных с помощью асимметричного ключа из хранилища ключей Azure
Шифрование резервных копий с помощью асимметричного ключа из хранилища ключей
Шифрование данных на уровне столбца с помощью асимметричного ключа из хранилища ключей
Перед выполнением описанных здесь инструкций выполните части с I по IV в статье Этапы настройки расширенного управления ключами с использованием хранилища ключей Azure.
Примечание.
Версии 1.0.0.440 и старше были заменены и больше не поддерживаются в рабочих средах. Выполните обновление до версии 1.0.1.0 или более поздней, посетив Центр загрузки Майкрософт и используя инструкции на странице Обслуживание соединителя SQL Server и устранение неполадок в разделе "Обновление соединителя SQL Server".
Примечание.
Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).
Прозрачное шифрование данных с помощью асимметричного ключа из хранилища ключей Azure
После выполнения частей с I по IV, описанных в статье "Этапы настройки расширенного управления ключами с использованием хранилища ключей Azure", используйте хранилище ключей Azure для шифрования ключа шифрования базы данных с помощью TDE. Дополнительные сведения о смене ключей с помощью PowerShell см. в статье Смена средства защиты прозрачного шифрования данных (TDE) с помощью PowerShell.
Внимание
После смены не удаляйте старую версию ключа. При смене ключей обычно сохраняются данные, зашифрованные предыдущими ключами, например, резервные копии базы данных, резервные копии файлов журналов и резервные копии файлов журналов транзакций.
Вам потребуется создать учетные данные и имя входа, а также ключ шифрования базы данных, который шифрует данные и журналы в базе данных. Чтобы зашифровать базу данных, для нее требуется разрешение CONTROL . На приведенном ниже рисунке показана иерархия ключа шифрования при использовании хранилища ключей Azure.
Создание учетных данных SQL Server для ядро СУБД, используемых для TDE
Ядро СУБД использует учетные данные приложения Microsoft Entra для доступа к Key Vault во время загрузки базы данных. Мы рекомендуем создать другой идентификатор клиента и секрет, как описано на шаге 1, для ядро СУБД, чтобы ограничить предоставленные разрешения Key Vault.
Измените приведенный ниже скрипт Transact-SQL следующим образом:
Измените аргумент
IDENTITY
(ContosoDevKeyVault
), чтобы он указывал на хранилище ключей Azure.- Если вы используете глобальную службу Azure, замените аргумент
IDENTITY
на имя вашего хранилища Azure Key Vault из части II. - Если вы используете частное облако Azure (например, Azure для государственных организаций, Azure под управлением 21Vianet или Azure в Германии), замените
IDENTITY
аргумент URI хранилища, возвращаемый в части II, шаг 3. Не включайте https:// в URI хранилища.
- Если вы используете глобальную службу Azure, замените аргумент
Замените первую часть
SECRET
аргумента идентификатором клиента приложения Microsoft Entra на шаге 1. В этом примере идентификатором клиента являетсяEF5C8E094D2A4A769998D93440D8115D
.Внимание
Необходимо удалить дефисы из идентификатора клиента.
Дополните вторую часть аргумента
SECRET
секретом клиента из части I. В этом примере секрет клиента из части I имеет значениеReplaceWithAADClientSecret
.Окончательная строка аргумента SECRET будет представлять собой длинную последовательность букв и цифр без дефисов.
USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Создание имени входа SQL Server для ядро СУБД для TDE
Создайте имя входа SQL Server и добавьте в него учетные данные из шага 1. В этом примере Transact-SQL используется тот же ключ, который был импортирован ранее.
USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it loads a database -- encrypted by TDE. CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault ALTER LOGIN TDE_Login ADD CREDENTIAL Azure_EKM_TDE_cred ; GO
Создание ключа шифрования базы данных (DEK)
Ключ DEK будет шифровать файлы данных и журналов в экземпляре базы данных и в свою очередь будет зашифрован с помощью асимметричного ключа хранилища ключей Azure. Ключ DEK можно создать, используя любой поддерживаемый алгоритм SQL Server или длину ключа.
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GO
Включение кэша TDE
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GO
С помощью Management Studio убедитесь, что TDE включен, подключившись к базе данных с помощью обозреватель объектов. Щелкните правой кнопкой мыши базу данных, наведите указатель на пункт Задачи, а затем щелкните Управление шифрованием в базе данных.
В диалоговом окне Управление шифрованием в базе данных проверьте, что TDE включено, и определите, какой асимметричный ключ используется для шифрования ключа DEK.
Кроме того, можно выполнить следующий скрипт Transact-SQL. Состояние шифрования 3 указывает на зашифрованную базу данных.
USE MASTER SELECT * FROM sys.asymmetric_keys -- Check which databases are encrypted using TDE SELECT d.name, dek.encryption_state FROM sys.dm_database_encryption_keys AS dek JOIN sys.databases AS d ON dek.database_id = d.database_id;
Примечание.
База данных
tempdb
шифруется автоматически, когда любая база данных включает прозрачное шифрование данных.
Шифрование резервных копий с помощью асимметричного ключа из хранилища ключей
Зашифрованные резервные копии поддерживаются начиная с SQL Server 2014 (12.x). В следующем примере создается и восстанавливается резервная копия, зашифрованная ключом шифрования данных, который защищен асимметричным ключом в хранилище ключей.
Ядро СУБД использует учетные данные приложения Microsoft Entra для доступа к Key Vault во время загрузки базы данных. Мы рекомендуем создать другой идентификатор клиента и секрет, как описано на шаге 1, для ядро СУБД, чтобы ограничить предоставленные разрешения Key Vault.
Создание учетных данных SQL Server для ядра СУБД, которые будут использоваться при шифровании резервной копии
Измените приведенный ниже скрипт Transact-SQL следующим образом:
Измените аргумент
IDENTITY
(ContosoDevKeyVault
), чтобы он указывал на хранилище ключей Azure.- Если вы используете глобальную службу Azure, замените аргумент
IDENTITY
на имя вашего хранилища Azure Key Vault из части II. - Если вы используете частное облако Azure (например, Azure для государственных организаций, Microsoft Azure, управляемый 21Vianet или Azure Germany), замените
IDENTITY
аргумент URI хранилища, возвращаемый в части II, шаг 3. Не включайте https:// в URI хранилища.
- Если вы используете глобальную службу Azure, замените аргумент
Замените первую часть
SECRET
аргумента идентификатором клиента приложения Microsoft Entra на шаге 1. В этом примере идентификатором клиента являетсяEF5C8E094D2A4A769998D93440D8115D
.Внимание
Необходимо удалить дефисы из идентификатора клиента.
Дополните вторую часть аргумента
SECRET
секретом клиента из части I. В этом примере секрет клиента из части I имеет значениеReplace-With-AAD-Client-Secret
. Окончательная строка аргументаSECRET
будет представлять собой длинную последовательность букв и цифр без дефисов.USE master; CREATE CREDENTIAL Azure_EKM_Backup_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Создание имени входа SQL Server для ядро СУБД для шифрования резервных копий
Создайте имя входа SQL Server для использования ядро СУБД для резервного копирования шифрования и добавьте в него учетные данные из шага 1. В этом примере Transact-SQL используется тот же ключ, который был импортирован ранее.
Внимание
Нельзя использовать тот же асимметричный ключ для шифрования резервных копий, если вы уже использовали этот ключ для TDE (приведенный выше пример) или шифрование на уровне столбца (следующий пример).
В этом примере используется асимметричный ключ
CONTOSO_KEY_BACKUP
из хранилища ключей, который мог быть импортирован или создан ранее для базы данных master на этапе 5 в части IV.USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it is encrypting the backup. CREATE LOGIN Backup_Login FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP; GO -- Alter the Encrypted Backup Login to add the credential for use by -- the Database Engine to access the key vault ALTER LOGIN Backup_Login ADD CREDENTIAL Azure_EKM_Backup_cred ; GO
Резервное копирование базы данных
Зашифруйте архивированную базу данных асимметричным ключом, сохраненным в хранилище ключей.
В следующем примере обратите внимание, что если база данных уже была зашифрована методом TDE и асимметричный ключ
CONTOSO_KEY_BACKUP
отличается от асимметричного ключа TDE, резервная копия будет зашифрована с помощью асимметричного ключа TDE иCONTOSO_KEY_BACKUP
. Целевой экземпляр SQL Server потребует обоих ключей для расшифровки резервной копии.USE master; BACKUP DATABASE [DATABASE_TO_BACKUP] TO DISK = N'[PATH TO BACKUP FILE]' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]); GO
Восстановление базы данных.
Чтобы восстановить резервную копию базы данных, зашифрованную с помощью TDE, целевой экземпляр SQL Server сначала должен иметь копию асимметричного ключа Key Vault, используемого для шифрования. Это можно сделать так:
Если исходный асимметричный ключ, используемый для TDE, больше не находится в Key Vault, восстановите резервную копию ключа Key Vault или повторно импортируйте ключ из локального модуля HSM. Важно! Чтобы отпечаток ключа совпал с записанным в резервной копии базы данных, ключ должен иметь исходное имя ключа Key Vault.
Примените шаги 1 и 2 к целевому экземпляру SQL Server.
Когда целевой экземпляр SQL Server имеет доступ к асимметричным ключам, используемым для шифрования резервной копии, восстановите базу данных на сервере.
Пример кода восстановления:
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GO
Дополнительные сведения о параметрах резервного копирования см. в статье BACKUP (Transact-SQL).
Шифрование данных на уровне столбца с помощью асимметричного ключа из хранилища ключей
В следующем примере создается симметричный ключ, защищенный асимметричным ключом в хранилище ключей. Затем симметричный ключ используется для шифрования данных в базе данных.
Внимание
Нельзя использовать тот же асимметричный ключ для шифрования на уровне столбцов, если этот ключ уже использовался для шифрования резервных копий.
В этом примере используется асимметричный ключ CONTOSO_KEY_COLUMNS
из хранилища ключей, который мог быть импортирован или создан ранее, как описано в этапе 3 раздела 3 статьи Этапы настройки расширенного управления ключами с использованием хранилища ключей Azure. Для использования асимметричного ключа в базе данных ContosoDatabase
необходимо выполнить инструкцию CREATE ASYMMETRIC KEY
еще раз, чтобы предоставить базе данных ContosoDatabase
ссылку на ключ.
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',
CREATION_DISPOSITION = OPEN_EXISTING;
-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
DECLARE @DATA VARBINARY(MAX);
--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY
(
KEY_GUID('DATA_ENCRYPTION_KEY'),
CONVERT(VARBINARY,'Plain text data to encrypt')
);
-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));
--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;
См. также
Этапы настройки расширенного управления ключами с использованием хранилища ключей Azure
Расширенное управление ключами с помощью хранилища ключей Azure
Включенный параметр конфигурации сервера поставщика расширенного управления ключами
Соединитель SQL Server, приложение