Настройка шифрования столбцов с использованием Always Encrypted и пакета DAC

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Пакет приложения уровня данных (DAC), также известный как DACPAC, является переносимой единицей развертывания базы данных SQL Server, определяющей все объекты SQL Server, включая таблицы и столбцы внутри таблиц. При публикации DACPAC в базу данных (при обновлении базы данных с помощью DACPAC) схема целевой базы данных обновляется для сопоставления схемы в DACPAC. DACPAC можно опубликовать с помощью Мастера обновления приложения уровня данных в SQL Server Management Studio, PowerShell или sqlpackage.

В этой статье рассматриваются особые рекомендации по обновлению базы данных, когда DACPAC или целевая база данных содержит столбцы, защищенные с помощью Always Encrypted. Если схема шифрования столбца в DACPAC отличается от схемы шифрования существующего столбца в целевой базе данных, при публикации DACPAC происходит шифрование, расшифровка или повторное шифрование хранящихся в столбце данных. Подробные сведения приведены в представленной ниже таблице.

Состояние Действие
Столбец зашифрован в DACPAC и не зашифрован в базе данных. Данные в столбце будут зашифрованы.
Столбец не зашифрован в DACPAC, а в базе данных он зашифрован. Данные в столбце будут расшифрованы (для столбца будет отменено шифрование).
Столбец шифруется как в DACPAC, так и в базе данных, но столбец в DACPAC использует другой тип шифрования или другой ключ шифрования столбца, отличный от соответствующего столбца в базе данных. Данные в столбце будет расшифрованы и повторно зашифрованы в соответствии с конфигурацией шифрования в DACPAC.

Развертывание пакета DAC может также привести к созданию или удалению объектов метаданных для главных ключей столбцов или ключей шифрования столбцов в Always Encrypted.

Рекомендации по производительности

Для выполнения криптографических операций средство, используемое для развертывания DACPAC, должно переместить данные за пределы базы данных. Средство создает в базе данных новую таблицу (или таблицы) с требуемой конфигурацией, загружает все данные из исходных таблиц, выполняет запрошенные криптографические операции, отправляет данные в новую таблицу, а затем меняет местами исходную и новую таблицы. Выполнение криптографических операций может занимать много времени. В течение этого времени база данных недоступна для записи транзакций.

Примечание.

Если вы используете SQL Server 2019 (15.x) и экземпляр SQL Server настроен с безопасным анклавом, вы можете выполнять криптографические операции на месте без перемещения данных из базы данных. См. статью Настройка шифрования столбцов на месте с помощью Always Encrypted с безопасными анклавами. Шифрование на месте недоступно для развертываний DACPAC.

Разрешения для публикации пакета DAC, если функция Always Encrypted настроена

Чтобы опубликовать пакет DAC, если Always Encrypted настроен в DACPAC или целевой базе данных, может потребоваться несколько или все указанные ниже разрешения в зависимости от различий между схемой в DACPAC и схеме целевой базы данных.

ИЗМЕНЯТЬ ЛЮБОЙ COLUMN MASTER KEY, ИЗМЕНЯТЬ ЛЮБОЙ COLUMN ENCRYPTION KEY, VIEW ЛЮБОЕ COLUMN MASTER KEY ОПРЕДЕЛЕНИЕ, VIEW ЛЮБОЕ COLUMN ENCRYPTION KEY ОПРЕДЕЛЕНИЕ

Если операция обновления активирует операцию шифрования данных, требуются также разрешения для хранилища ключей на доступ к главному ключу столбца и на его использование. Подробные сведения о разрешениях на доступ к хранилищу ключей см. в статье Создание и хранение главных ключей столбцов для Always Encrypted и найдите раздел, относящийся к вашему хранилищу ключей.