1

我们正在寻找一种解决方案来在数据库中实现“始终加密”的列,我们同时使用许多 SQL 临时表 (#tmp)。

我们探索了替代路径 - 停止使用 #temp 表,但这意味着在时间/成本方面对我们的应用程序产生很大影响。

有没有人找到一种方法来编写像“insert into #tmp select from my_table”这样的查询,其中 my_table 包含 AE 列?

我尝试将相同的 CMK 和 CEK 应用于 tempdb 数据库,以便可以为 #tmp 表创建与 my_table 的结构相同的结构。但这并不能解决问题 - 将表放在 2 个不同的数据库中似乎会阻止数据传输。

我正在寻找一个 SQL 解决方案,而不是一个涉及可以访问所有加密密钥的客户端应用程序(C#、vb 等)的解决方案。

4

1 回答 1

1

加密列不支持以您描述的方式进行插入操作。

“插入到 #tmp 从 my_table 中选择”

您必须编写一个客户端应用程序才能获得类似的结果。如果你想探索这条路,请发表评论,我可以指导你。


您应该能够在 C# 中实现类似的功能,如下所示。

  • 将数据加载到 SqlDataReader 中,然后使用 SqlBulkCopy 使用Methodselect * from encryptedTable将其加载到临时表中SqlBulkCopy.WriteToServer(IDataReader)

如果您在同一个 SQL Server 实例上拥有加密表和明文表,请注意您可能会将信息泄露给 SQL Server 管理员,因为他们可以检查明文数据和相应的密文

于 2017-09-11T20:18:51.660 回答