SQL Server: всегда зашифрованная хранимая процедура - несоответствие схемы шифрования для столбцов / переменных - PullRequest
0 голосов
/ 16 мая 2018

В связи с изменениями правил в Великобритании мы изменяем нашу базу данных, чтобы использовать Always Encrypted для всех идентифицирующих и потенциально конфиденциальных данных нашего лица.

При попытке запустить хранимую процедуру после того, как все шифрование состоялось, я получил следующую ошибку.

Несоответствие схемы шифрования для столбцов / переменных '@FilePath'. Схема шифрования для столбцов / переменных: (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_key_name__exject__ject_name_name =) = => PLAINTEXT ') (или слабее).

Итак, при просмотре и комментировании оскорбительной строки SP создает и запускает "отлично".

Прекрасно, так как теперь он имеет неверные значения.

SQL-нарушитель:

select @FilePath = ParameterValue from Parameter where ParameterCode = 'EXPORT_PATH'

Итак, я вытащил эту строку в собственный SQL, а не в SP, и заставил ее работать так.

DECLARE @FilePath VARCHAR(8000) = '',
@ParameterCode varchar(50) = 'EXPORT_PATH'

SELECT @FilePath  = ParameterValue from Parameter where ParameterCode = @ParameterCode
SELECT @FilePath

Что работает отлично, однако, когда я оборачиваю это в SP, как

CREATE PROCEDURE SIMONTEST
AS
BEGIN
DECLARE @FilePath VARCHAR(8000) = '',
@ParameterCode varchar(50) = 'EXPORT_PATH'

SELECT @FilePath  = ParameterValue from Parameter where ParameterCode = @ParameterCode
SELECT @FilePath
END 
GO

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

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

Не удалось подготовить оператор (ы).

Произошла ошибка при выполнении пакета. Сообщение об ошибке: Внутренняя ошибка. Метаданные для параметра '@ p411c14c506c74dc690baf9ef724f7409' в выражении или процедура 'СОЗДАТЬ ПРОЦЕДУРУ СИМОНТЕСТ КАК НАЧАТЬ ОБЪЯВИТЬ @FilePath AS VARCHAR (8000) = @ p411c14c506c74dc690baf9ef724f7409, @ParameterCode AS VARCHAR (50) = @ p9f3729b1d64742cf858ff9edb30a5d71; SELECT @FilePath = ParameterValue ИЗ параметра ГДЕ ParameterCode = @ParameterCode; SELECT @FilePath; END

'отсутствует в наборе результатов, возвращаемом sp_describe_parameter_encryption.

Я был бы признателен, если бы кто-то мог помочь мне понять проблему и помочь мне решить ее.

1 Ответ

0 голосов
/ 21 мая 2018

Я не могу точно сказать, почему или как это сработало, но здесь идет речь, что сработало для меня

Сначала я отключил шифрование (в диалоговом окне шифрования всегда зашифрованных столбцов SSMS в качестве метода шифрования в качестве метода шифрования PLAINTEXT) для столбцов, участвующих в предложениях WHERE sproc

Во-вторых, я отключил параметр «Параметризованный запрос» из SSMS только для того конкретного параметра ALTER или CREATE, который мне нужно было сделать. Вы найдете его в Query> Query options> Execution> Advanced

В-третьих, я изменил / создал свой sproc, обращая внимание на правильную параметризацию переменных для предложений WHERE, чтобы не допустить несовместимости операторов сравнения

В-четвертых, после выполнения запроса создания / изменения без той ошибки, о которой вы сообщили, я снова включил шифрование столбцов, как они были.

Sprocs наконец-то выполняется нормально, а также (требуется дальнейшее тестирование), казалось, что последующим изменениям не нужны вышеуказанные шаги. Но, как я уже сказал, я не уверен в этом. Завтра я попробую еще раз.

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