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

时间:2019-03-20 19:02:30

标签: sql sql-server encryption ssis ssis-2012

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

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

演示表的“名称”字段已加密。

现在我有一个平面文件,其数据类似

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

1 个答案:

答案 0 :(得分:2)

最简单,最快的方法是使用一个临时表,其中将数据存储为varchar,然后添加一个执行SQL任务以执行加密并将数据插入目标表中。

登台表结构

import tkinter as tk

root = tk.Tk()
root.configure(background="gray")
listbox_border = tk.Frame(root, bd=1, relief="sunken", background="white")
listbox_border.pack(padx=10, pady=10, fill=None, expand=False)

listbox = tk.Listbox(listbox_border, width=20, height=10,
                     borderwidth=0, highlightthickness=0,
                     background=listbox_border.cget("background"),
)
vsb = tk.Scrollbar(listbox_border, orient="vertical", command=listbox.yview)
listbox.configure(yscrollcommand=vsb)
vsb.pack(side="right", fill="y")
listbox.pack(padx=10, pady=10, fill="both", expand=True)

for i in range(100):
    listbox.insert("end", "Item #{}".format(i))

root.mainloop()

执行SQL任务命令

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

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

尝试使用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'),Name),OrderDate 
FROM StagingTable

CLOSE SYMMETRIC KEY STORE_CRYPT

然后将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映射到第二个参数