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

标签 sql sql-server encryption ssis ssis-2012

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

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

Demo 表具有加密的字段“名称”。

现在我有一个包含如下数据的平面文件

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

最佳答案

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

暂存表结构

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 列映射到第二个

关于sql - 如何使用 SSIS 从平面文件中将数据插入到加密的 varbinary 字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55268369/

相关文章:

sql-server - SQL事务错误: The current transaction cannot be committed and cannot support operations that write to the log file

ssl - 使用 HTTP(不是 HTTPS)下载 RPM 是否安全?

php - 我无法在实时服务器上的 mysql phpmyadmin 中导入 450 .sql.zip 文件

java - 使用java在访问表中搜索值

python - 如何在 SQLAlchemy 中使用过滤运算符

sql-server - 性能星型模式(BI)

sql-server - JSON 列或传统列

c++ - 如何在 Oracle PRO*C 中按名称绑定(bind)

java - 在 android 和 java 中完成 AES/CBC/PKCS5Padding 加密。加密文本不匹配

c# - C++ .NET DLL 与 C# 托管代码? (文件加密 AES-128+XTS)