Настроить всегда зашифрованный для существующего столбца через t-sql - PullRequest
0 голосов
/ 31 октября 2018

У меня есть сценарий, в котором мне нужно зашифровать несколько существующих столбцов с помощью «Always Encrypted», но мне нужно сделать это с помощью сценариев t-Sql (протестированный сценарий должен выполняться в производственной среде). Как это можно сделать?

Аналогично ниже

ALTER TABLE testTable ALTER COLUMN StringColumn  NVARCHAR(20) COLLATE
Latin1_General_BIN2  ENCRYPTED WITH (
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK_Auto4)

Но приведенный выше код выдает следующую ошибку

Столкновение с типом операнда: nvarchar несовместим с nvarchar (20) зашифровано с помощью (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEKName', column_encryption_key_database_name = 'DBName')

Примечание. У меня нет условий для выполнения сценариев PowerShell. У меня уже есть t-SQL скрипт для генерации ключей

1 Ответ

0 голосов
/ 01 ноября 2018

Вы не можете сделать это, потому что SQL Server не может расшифровать и зашифровать ваши данные. Это может происходить только на стороне клиента (приложение, SSMS, PowerShell). По сути, вы должны добавить новые зашифрованные столбцы и скопировать незашифрованные данные из существующей. Обратите внимание, что этого нельзя сделать, выполнив простую инструкцию T-SQL «update table set encrypted_column = unencrypted_column», поскольку SQL Server не может зашифровать / расшифровать данные. Так что либо вы должны сделать это на уровне приложения, либо запустить мастер SSMS и сохранить процесс как сценарий PowerShell, который вы сможете запустить на своем производственном сервере позже.

...