我在“始终加密”(确定性)的SQL Server表中存储了密码。我有一个SSIS程序包,它的程序包级别参数称为“ parmPassword”。我正在尝试使用该加密列值通过在SSISDB中使用参数值创建执行来设置默认SSIS参数。
我在连接字符串中有“列加密设置=启用”。为查询设置参数。
此代码可以正常运行(在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说,如果不对变量进行参数化,则可能导致此错误:
他们说您必须在一行中全部声明变量才能发生这种情况。我认为,如果我可以内联定义@parameter_value而不是使用@ var3,这可能会起作用,但我认为这是不可能的。
有人对如何实现这一目标有任何想法吗?