CI с SQL всегда зашифрованным столбцом - PullRequest
1 голос
/ 07 января 2020

Мы пытаемся добавить Always зашифрованные в одном из наших приложений, и мы хотели бы, чтобы оно работало с нашим потоком CI.

Мы используем DACPA C deploy с Azure Devops. Все работало до сих пор, но мы сталкиваемся с проблемой с всегда зашифрованным ...

Каждая среда SQL должна иметь другой ключ, который находится в Azure Key Vault. Мы нашли способ автоматизировать это с помощью переменных SSDT ( ref )

CREATE COLUMN MASTER KEY  [ResponseKey] WITH (
     KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
     KEY_PATH = N'[$(OurVariableName)]' );

Когда сравнение между нашей БД и DACPA C выполнено, скрипт всегда содержит Drop + Создать ключ, даже если значение ключа одинаково. Мы попытались вывести сгенерированный скрипт, и наше значение ключа из Azure хранилище ключей находится в разделе переменных скрипта. Как будто сравнение не работает с переменными.

Кто-нибудь сделал эту работу?

Кроме того, когда мы добавляем новый зашифрованный столбец, сгенерированный сценарий всегда завершается ошибкой, заявляя, что в таблице уже есть данные. Это похоже на эту ссылку

1 Ответ

0 голосов
/ 09 января 2020

После нескольких дней исследований кажется, что невозможно использовать переменные для изменения значений ключей для развертывания нашего DACPA C в каждой из наших сред. (Или мы не нашли, как!).

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

Мы добавили две опции в наш профиль XML Publishing:

 <ExcludeColumnEncryptionKeys>True</ExcludeColumnEncryptionKeys>
 <ExcludeColumnMasterKeys>True</ExcludeColumnMasterKeys>

Когда мы развертываем в нашем потоке CI, ключи не сравниваются и не меняются делается со структурой, даже если они разные.

Было бы неплохо иметь возможность использовать переменную вместо того, чтобы делать что-то вручную, но это так, как кажется!

CI + Всегда зашифрованы, не go вместе!

...