Как передать пароль сертификата дешифрования в качестве параметра хранимой процедуре - PullRequest
1 голос
/ 21 февраля 2020

Используя SQL Server 2012 v11.0.2100.60, я пытаюсь создать хранимую процедуру, которая открывает ключ симметрии c с расшифровкой по сертификату с паролем.

Если я добавлю жестко запрограммированный пароль в хранимую процедуру, она будет работать нормально, но я хотел бы иметь возможность передать пароль сертификата в качестве параметра хранимой процедуре (чтобы обычный текст pw не жить где угодно на сервере).

Вот что я пробовал.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[testSproc]
    @pw VARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;

    OPEN SYMMETRIC KEY key_name  
    DECRYPTION BY CERTIFICATE cert_name WITH PASSWORD = '''+@pw+''';

    SELECT ....

При выполнении я получаю следующее:

Сообщение 15466, Уровень 16, Состояние 9, Процедура testSpro c, строка 9
Произошла ошибка при расшифровке.

Вот как это выглядит, когда я выполняю:

DECLARE @return_value int

EXEC    @return_value = [dbo].[testSproc]
        @GL = N'98787notTheRealPW45668456318'
        -- I've tried both N'98787notTheRealPW45668456318' and just '98787notTheRealPW45668456318'

SELECT  'Return Value' = @return_value
GO

Я неправильно передаю параметр? Или установка переменной в хранимой процедуре неправильно? Любая помощь очень ценится!

1 Ответ

0 голосов
/ 24 февраля 2020
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[testSproc]
    @pw NVARCHAR(max)
AS
BEGIN
    DECLARE @SQL AS NVARCHAR(MAX);
    SET NOCOUNT ON;
    SET @SQL = 'OPEN SYMMETRIC KEY key_name DECRYPTION BY CERTIFICATE cert_name WITH PASSWORD = '''+@pw+'''';

    EXEC (@SQL)
    SELECT ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...