我正在尝试编写一个存储过程来解密由对称密钥加密的某些数据,该密钥使用密码使用非对称密钥加密。在存储过程中使用密码打开对称密钥
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注入的任何想法? – Greg 2012-01-09 04:59:08
像往常一样 - 因为你不能传递密码作为参数,使用自定义密码字符串检查,并运行在用户,只有一个访问权限下的语句 - 读取和解密特定列从特定表 – 2012-01-09 05:03:36
您的代码仍然产生我之前得到的同样的错误 – Greg 2012-01-09 05:09:46