Я пытаюсь написать хранимую процедуру для расшифровки некоторых данных, зашифрованных с помощью симметричного ключа, который зашифрован с помощью асимметричного ключа с паролем.
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
или есть (более) элегантный способ справиться с этим?
РЕДАКТИРОВАТЬ: Какой лучший способ справиться с тем, кто вызывает эту процедуру с неправильным паролем?