【发布时间】:2012-01-09 04:08:26
【问题描述】:
我正在尝试编写一个存储过程来解密一些由对称密钥加密的数据,该对称密钥使用带有密码的非对称密钥加密。
OPEN SYMMETRIC KEY 需要一个字符串文字作为密码,所以我不得不使用EXEC sp_executesql 来解决这个问题。有没有更好的方法来做到这一点?
DECLARE @open nvarchar(200), @close nvarchar(200)
SET @open = 'OPEN SYMMETRIC KEY skey DECRYPTION BY ASYMMETRIC KEY akey WITH PASSWORD = ' + quotename(@password,'''') + ';';
SET @close = 'CLOSE SYMMETRIC KEY skey;';
EXEC sp_executesql @open
SELECT [TransactionID],Convert(varchar(max),DECRYPTBYKEY([EncryptedText])) as DecryptedText FROM [dbo].[TestTable];
EXEC sp_executesql @close
如果你使用错误的密码执行它会抛出以下错误:
Msg 15466, Level 16, State 1, Line 1
An error occurred during decryption.
Msg 15315, Level 16, State 1, Line 1
The key 'skey' is not open. Please open the key before using it.
我应该将EXEC sp_executesql @open 包裹在TRY ... CATCH 中并返回NULL 还是有(更)优雅的处理方式?
编辑:处理使用错误密码调用此过程的人的最佳方法是什么?
【问题讨论】:
标签: sql-server sql-server-2008 stored-procedures encryption