1

我想加密 SQL Server 2005 中的现有列,使用 UPDATE 语句,将旧内容移动到新的加密列中。

所以我有两个选择:对称和不对称。

我遇到的问题是,使用对称密钥,我必须将密码嵌入到 SP 中才能读取如下列:

-- Create key (at some earlier point)
create symmetric key sk_user_profile with algorithm = aes_192 encryption by password = 'P@ssword!!';

-- Now encrypt the contents
-- open the key so that we can use it
open symmetric key sk_user_profile decryption by password = 'P@ssword!!';

UPDATE users
SET password_enc = encryptbykey(key_guid('sk_user_profile'), password_plain, 1, user_id)

close symmetric key sk_user_profile

现在如果我想选择数据,我仍然需要重新打开密钥

open symmetric key sk_user_profile decryption by password = 'P@ssword!!';

这不是重点,因为我在存储过程中嵌入了纯文本密码。

一些问题

  1. 有没有办法解决这个问题 - 即使用此密码创建证书,然后引用证书?
  2. 是否必须购买此证书(如 SSL),或者我可以创建自己的证书吗?
  3. 这种方法是否可跨故障转移集群数据库进行扩展,即加密不基于机器,仅基于提供的密码。因此故障转移仍然可以读取密码

谢谢你的帮助

4

1 回答 1

1

基本上你需要做的是:

create certificate MyEncryptionCertificate with subject = 'MyCertificate'

create symmetric key MySymmetricKey with algorithm = aes_256 encryption by certificate MyEncryptionCertificate

进而:

open symmetric key MySymmetricKey decryption by certificate MyEncryptionCertificate

select encryptbykey(key_guid('MySymmetricKey'), 'tada')) EncryptedMessage

我希望这个博客能帮助你一路走来。

SQL SERVER – SQL Server 加密简介和带脚本的对称密钥加密教程

还有这个博客条目,它专门处理故障转移环境中的证书。

在生产服务器上使用证书身份验证的解决方案

于 2010-09-15T18:25:37.097 回答