如何使用 SSIS 从平面文件中将数据插入到加密的 varbinary 字段中?

How to insert data in encrypted varbinary field from flat file using SSIS?

我有一个名为 demo 的 table,其中包含三个字段。

ID int identity,
Name varbinary(128),
orderdate datetime

Demo table 的字段 'Name' 已加密。

现在我有一个平面文件,其中包含类似

的数据
1,John,2016-01-01

我将如何在 SSIS 中实现这一点?

在TSQL中,我可以这样输入数据

OPEN SYMMETRIC KEY STORE_CRYPT

DECRYPTION BY ASYMMETRIC KEY STORE_CRYPT_ASYM

INSERT INTO dbo.Demo (Name,OrderDate)
SELECT ENCRYPTBYKEY(KEY_GUID('STORE_CRYPT'),'John'),GETDATE()

CLOSE SYMMETRIC KEY STORE_CRYPT

最简单和最快的方法是使用暂存 table,其中数据存储为 varchar,然后添加执行 SQL 执行加密并将数据插入目标的任务 table.

分期table结构

ID int identity,
Name varchar(255),
orderdate datetime

执行SQL任务命令

OPEN SYMMETRIC KEY STORE_CRYPT

DECRYPTION BY ASYMMETRIC KEY STORE_CRYPT_ASYM

INSERT INTO dbo.Demo (Name,OrderDate)
SELECT ENCRYPTBYKEY(KEY_GUID('STORE_CRYPT'),Name),OrderDate 
FROM StagingTable

CLOSE SYMMETRIC KEY STORE_CRYPT

其他可能的解决方案 (不确定是否可行)

尝试使用 OLEDB 命令转换而不是 OLEDB 目标并使用以下命令:(请注意,从性能角度来看,不建议使用 OLEDB 命令)

OPEN SYMMETRIC KEY STORE_CRYPT

DECRYPTION BY ASYMMETRIC KEY STORE_CRYPT_ASYM

INSERT INTO dbo.Demo (Name,OrderDate)
SELECT ENCRYPTBYKEY(KEY_GUID('STORE_CRYPT'),?),?

CLOSE SYMMETRIC KEY STORE_CRYPT

并将 Name 列映射到第一个参数,将 Orderdate 映射到第二个