如何在Sql Server 2008中加密数字列?

时间:2011-07-19 02:41:35

标签: sql-server sql-server-2008

如何在Sql Server 2008中加密数字列?

我想在Sql Server 2008中加密员工的工资列。

列类型为数字或金钱。

是否有任何加密方法可以支持以下要求?

  1. 是否有用于加密列的sql加密用户定义函数?加密结果的类型是字符串就可以了。
  2. sql server本身是否支持这种加密?
  3. 是否有一种简单的加密方法可以加密123.56到362.15之类的数字?
  4. 我使用C#和Sql Server 2008。

3 个答案:

答案 0 :(得分:4)

您无法加密数字数据类型。您需要做的是将列转换为VarChar列,然后您可以使用Base64以加密格式存储该数字。一个1000的VarChar列就足够了。

您也可以将其存储在Binary字段中,而无需进行Base64编码。

答案 1 :(得分:3)

以下是MONEY数据类型的示例:

DECLARE @actualAmount MONEY;
DECLARE @encryptedAmount VARBINARY(128);

-- Encrypt value
SET @actualAmount = $12345.67;
SET @encryptedAmount = ENCRYPTBYKEY(KEY_GUID('MyEncryptionKeyName'), CONVERT(VARCHAR(30), @actualAmount));
PRINT @actualAmount;
PRINT @encryptedAmount;

-- Decrypt value
DECLARE @unencryptedActualAmount MONEY;
SET @unencryptedActualAmount = CONVERT(MONEY, CONVERT(VARCHAR(30), DECRYPTBYKEY(@encryptedAmount)));
PRINT @unencryptedActualAmount;

答案 2 :(得分:0)

任何加密函数都不会有数字或金钱的输出类型。加密值始终是字节数组(sql二进制数据类型),或字节数组的某种表示形式(例如base64编码的字符串)。