Как передать всегда зашифрованные значения столбцов в параметры пакета служб SSIS - PullRequest
3 голосов
/ 09 мая 2019

У меня есть пароль, хранящийся в таблице SQL Server, которая «всегда зашифрована» (детерминистически). У меня есть пакет служб SSIS, который имеет параметр уровня пакета, называемый «parmPassword». Я пытаюсь использовать значение этого зашифрованного столбца для установки параметра SSIS по умолчанию, создавая выполнение в SSISDB со значением параметра.

У меня есть "настройка шифрования столбца = включено" в строке подключения. Параметризация установлена ​​для запроса.

Этот код работает нормально (в SSMS):

DECLARE @var3 nvarchar(100) = (Select [SSISPackageParameterValue]
  FROM [mydb].[environment].[myalwaysencyptedtable]
  Where SSISPackageParameter = 'parmPassword'
  Collate Latin1_General_BIN2)

  select @var3

Возвращает мой пароль.

mypassw0rd

Но когда я добавляю EXEC, он больше не работает, возможно, из-за того, что переменная @ var3 передается слишком много раз:

DECLARE @var3 nvarchar(100) = (Select [SSISPackageParameterValue]
  FROM [mydb].[environment].[myalwaysencyptedtable]
  Where SSISPackageParameter = 'parmPassword'
  Collate Latin1_General_BIN2)

EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,
    @object_type=30,
      @parameter_name=N'parmPassword',
      @parameter_value=@var3

Я получаю эту ошибку, когда запускаю приведенный выше код в SSMS. (Приведенный выше код также отлично работает при работе с незашифрованной таблицей.) Ошибка попадает в строку с EXEC:

Encryption scheme mismatch for columns/variables '@var3'. The encryption scheme for the columns/variables is (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'mydb') and the expression near line '0' expects it to be (encryption_type = 'PLAINTEXT'). 

Microsoft говорит, что эта ошибка может быть вызвана, если вы не параметризовали переменную:

https://blogs.msdn.microsoft.com/sqlsecurity/2016/12/13/parameterization-for-always-encrypted-using-ssms-to-insert-into-update-and-filter-by-encrypted-columns/

Они говорят, что вы должны объявить переменную все в одну строку, чтобы это произошло. Я думаю, что это может сработать, если бы я мог определить @parameter_value inline вместо использования @ var3, но я не думаю, что это возможно.

У кого-нибудь есть идеи, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...