всегда зашифрованный запрос в хранимой процедуре - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь получить значение из столбца, который зашифрован с использованием функции «Всегда зашифровано». В SSMS я указал опцию соединения «column encryption setting = enabled», и параметр «Enable Parameterization for Always Encrypted» также включен.

Этот запрос, выполненный сам по себе, работает как положено.

DECLARE @value varchar(25) = '345'

SELECT PrivateID
FROM TestDB.dbo.tblData
WHERE PrivateID = @value

Но, если я пытаюсь поместить это в хранимую процедуру:

ALTER PROCEDURE dbo.Test
AS
BEGIN
    DECLARE @value varchar(25) = '345'

    SELECT PrivateID
    FROM TestDB.dbo.tblData
    WHERE PrivateID = @value
END
GO

Я получаю ошибки:

Сообщение 156, Уровень 15, Состояние 1, Строка 1
Неверный синтаксис рядом с ключевым словом 'PROCEDURE'.

Сообщение 156, Уровень 15, Состояние 1, строка 1
Неверный синтаксис рядом с ключевым словом 'PROCEDURE'.

Сообщение 156, Уровень 15, Состояние 1, Строка 1
Неверный синтаксис рядом с ключевым словом «ПРОЦЕДУРА».

Сообщение 156, Уровень 15, Состояние 1, Строка 1
Неверный синтаксис рядом с ключевым словом «ПРОЦЕДУРА»'.

Сообщение 8180, Уровень 16, Состояние 1, Процедура sp_describe_parameter_encryption, Строка 1 [Стартовая строка запуска 0]
Оператор (ы) не может быть подготовлен.

Сообщение 8180, Уровень16, Состояние 1, Процедура sp_describe_parameter_encryption, Строка 1 [Стартовая Строка 0]
Оператор (ы) не может быть подготовлен.

Сообщение 8180, Уровень 16, Состояние 1, Процедура sp_describe_parameter_encryption, Строка 1 [Стартовая строка 0)
Оператор (ы) не может быть подготовлен.

Сообщение 8180, Уровень 16, Состояние 1, Процедура sp_describe_parameter_encryption, Строка 1 [Строка запуска партии 0]
Оператор (ы) не может быть подготовлен.

Произошла ошибка при выполнении пакета,Сообщение об ошибке: Внутренняя ошибка. Метаданные для параметра '@ p850913a51d1247f290af5a8e7dd24f25' в операторе или процедуре 'ALTER PROCEDURE dbo.Test AS BEGIN DECLARE @value AS VARCHAR (25) = @ p850913a51d1247f290af5a8e7dd24f25;ВЫБЕРИТЕ PrivateID ИЗ TestDB.dbo.tblData WHERE PrivateID = @value;END 'отсутствует в наборе результатов, возвращаемом sp_describe_parameter_encryption.

Как правильно получить результаты из всегда зашифрованного столбца с помощью хранимой процедуры?

1 Ответ

0 голосов
/ 29 октября 2019

Я выяснил причину этой ошибки благодаря сообщению на форуме MSDN " всегда зашифрованный запрос в хранимой процедуре ".

При попытке создать (или изменить) хранимую процедуру с помощьюпараметризация включена в SSMS, это то, что показывает трассировка передается на сервер, прежде чем я увижу ошибку в исходном сообщении (ссылка sp_describe_parameter_encryption ).

exec sp_describe_parameter_encryption N'ALTER PROCEDURE [dbo].[Test]
AS
BEGIN
    DECLARE @value AS VARCHAR (25) = @p9f7f4f9078e14e1e8b661791c0c1348a;
    SELECT PrivateID
    FROM   TestDB.dbo.tblData
    WHERE  PrivateID = @value;
END

',N'@p9f7f4f9078e14e1e8b661791c0c1348a varchar(25)'

Для выполнения чегоЯ пытался протестировать, мне просто нужно было создать простую хранимую процедуру, приведенную ниже.

ALTER PROCEDURE dbo.Test
    @PrivateID varchar(25) 
AS
BEGIN
    SELECT PrivateID
    FROM TestDB.dbo.tblData
    WHERE PrivateID = @PrivateID
END

А затем с настройками параметризации, включенными в SSMS, выполнить ее следующим образом.

DECLARE @t varchar(25) = '345'
EXEC dbo.Test @t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...