【发布时间】:2014-02-20 01:03:12
【问题描述】:
我正在尝试在测试数据库上设置一些加密。目前,我正在创建一个非对称密钥,它使用用户提供的密码来加密私钥。然后我使用它来加密我创建的对称密钥。
CREATE ASYMMETRIC KEY myAsymmetricKey
WITH ALOGRITHM = RSA_2048
ENCRYPTION BY PASSWORD = 'mySecurePassword'
GO
CREATE SYMMETRIC KEY mySymmetricKey
WITH ALOGRITHM = AES_256
ENCRYPTION BY ASYMMETRIC KEY myAsymmetricKey
GO
我能够成功加密目标数据库表中的所需列
OPEN SYMMETRIC KEY mySymmetricKey
DECRYPTION BY ASYMMETRIC KEY myAsymmetricKey WITH PASSWORD = 'mySecurePassword'
UPDATE myTable
SET EmailAddressEncrypted = ENCRYPTBYKEY(KEY_GUID('mySymmetricKey'), EmailAddress)
CLOSE SYMMETRIC KEY mySymmetricKey
我的问题与数据解密有关。理想情况下,我希望能够在调用者传入密码的情况下在存储过程中执行此操作。
CREATE PROCEDURE Foo
@id int,
@password varchar(30)
AS
BEGIN
SELECT TargetID,
EmailAddress
CAST(DECRYPTBYKEYAUTOASYMKEY(ASYMKEY_ID('myAsymmetricKey'), @password, emailAddressEncrypted) AS VARCHAR(125))
FROM myTable
WHERE TargetID = @id
END
不幸的是,当我尝试创建此过程时,我收到以下错误:
参数数据类型 varchar 对于 DecryptByKeyAutoAsymKey 函数的参数 2 无效。
我对此感到困惑,因为当我查看 DecrypByKeyAutoAsymKey 的 MSDN page 时,它说参数 2“akey_password”是:
是保护非对称密钥的私钥的密码。如果私钥受数据库主密钥保护,则可以为 NULL。 akey_password 是 varchar。
他们在页面上的示例仅使用 NULL 作为此参数的值,这在此处不起作用,因为我不相信我正在使用 DMK 加密私钥。任何关于我在这里做错的帮助/建议或更好的实现方式将不胜感激。谢谢。
注意:这是在 SQL Server 2008 上
【问题讨论】:
标签: sql sql-server sql-server-2008 encryption