我正在嘗試編寫一個存儲過程來解密由對稱密鑰加密的某些數據,該密鑰使用密碼使用非對稱密鑰加密。在存儲過程中使用密碼打開對稱密鑰
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