Sql Server加密和解密

时间:2016-04-05 07:54:13

标签: sql-server encryption cryptography

我想在我的数据库中使用sql server加密和解密。我读了很多与此相关的文章,我也在我的sql server中尝试过这个东西。 我在最后尝试了Transparent Data Encryptionsys.symmetric_keys。对称密钥也称为基于字段/单元的安全性,其中TDS表中的密钥保存和具有管理员权限的人可以查看该密钥并使用它,第二个certificate + private key + Encription By Password可用于{certificate + private key 1}}并且基本上用于保护我们的数据库,就像有人拥有我的数据库备份一样,然后他们无法在不知道Encription By Password文件和Symmetric key and TDS的情况下恢复它。这些都是我在使用TDS时所了解的要点。根据我的研究,我发现Symmetric key非常安全,但Symmetric Key不安全,因为它将密钥保存在数据库中。

所以我想知道我在UPDATE dbo.tablename SET CARDnumber_encrypted= EncryptByKey(Key_GUID('CreditCards_Key'), FirstName);拓扑中可能提到的步骤。如果是,则如何以及如果否则那么实现同样的事情的其他方式是什么。

  1. 如何不将密钥存储在数据库中意味着每次我 想加密该字段将从前端传递我的密钥。
  2. Key_GUID('CreditCards_Key')我如何在decrypt使用一些额外的变量,这样如果某个人拥有密钥,那么他们仍然不能{{1}}该字段。
  3. 我甚至可以使用前端的加密技术,比如加密前端的值,然后将其保存到后端,再次解密该字段,我会在前端做那件事,但我想把所有的东西都做到后端不是前端。

    所以请指导我如何实现我提到的那些要点。如果你不明白我的意思请再次问我。

    任何帮助都会得到满足。

1 个答案:

答案 0 :(得分:1)

ENCRYPTBYKEY()函数采用the documentation中指定的可选身份验证器。所述目的是避免在知道明文的某些固有属性时将另一个加密值替换为另一个加密值(所引用的示例是加密的工资栏,并且知道CFO的收入高于复制室中的员工)。

但是,没有什么可以阻止您使用相同的机制来使用未存储在数据库中的静态身份验证器作为一种密码。未能在解密时提供该验证器将导致解密失败。