在不更改数据类型的情况下加密SQL Server中的数据库

时间:2017-01-18 12:03:00

标签: sql-server encryption

我正在寻找一些用于加密表的轻量级加密算法。我已经解释了我的要求如下:

场景:为简单起见,只考虑SQL Server中的一个表。每3秒后,数据将插入表中。由于我在SQL Server中寻找加密和解密,因此我遇到了一些很好的链接(https://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/

约束:根据本文,我们需要更改我们必须将加密应用于varbinary的任何列的数据类型,但我不想更改任何列的数据类型(数据库已经正常工作 - 加密除外)

所以,即使我将此EncryptByKey视为一个简单的解决方案,但我不想更改所有列的数据类型。

我不需要更改数据类型的任何其他建议吗?

2 个答案:

答案 0 :(得分:1)

加密的结果不是字符串,它是一个8位字节的数组,许多字节在任何字符编码中都不是有效字符。这就是varbinary数据类型的原因。

最佳解决方案是将数据类型更改为varbinary但如果这是不可接受的,则解决方法是将加密输出编码为有效的字符表示,最常见的两种是Base64和十六进制。这当然会在添加到数据库和检索时添加一些代码和时间。

答案 1 :(得分:0)

这取决于每列的当前数据类型。对于已经varchar的东西,你可以只用Base64或十六进制编码密码文本,如zaph所说。对于需要维护特定格式的列,您需要调查Format Preserving Encryption - 例如how to encrypt credit card numbers while maintaining the format