MS SQL Server EncryptByKey - строка или двоичные данные будут усечены

Теоретически varchar(max) а также varbinary(max) столбцы должны иметь возможность хранить до 2 ГБ данных, но я не могу хранить строку в юникоде длиной 5000 символов.

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

Ключевое отличие от похожих вопросов заключается в том, что при хранении я шифрую данные, используя EncryptByKey и я думаю, что это узкое место, которое я ищу. Из MSDN я знаю, что возвращают тип EncryptByKey имеет максимальный размер 8000 байт, и не ясно, каков максимальный размер @cleartext аргумент, но я подозреваю, что это то же самое.

Следующий код дает мне ошибку:

OPEN SYMMETRIC KEY SK1 DECRYPTION BY CERTIFICATE Cert1;

DECLARE @tmp5k AS NVARCHAR(max);
SET @tmp5k = N'...5000 characters...';
SELECT EncryptByKey(Key_GUID('SK1'), @tmp5k);
GO

[22001] [8152] Строковые или двоичные данные будут усечены.

Как зашифровать и хранить большие строки (около 5 тыс. Символов Юникода)?

1 ответ

Поэтому я столкнулся с этой проблемой при использовании С# и попытке зашифровать и вставить длинную строку JSON в SQL. Что в итоге сработало, так это преобразование простой текстовой строки в двоичную, а затем использование той же функции SQL EncryptByKey для ее вставки.

Если вы делаете это просто SQL, я думаю, вы можете использовать эту функцию:

      CONVERT(VARBINARY(MAX), @tmp5k) AS ToBinary

Итак, используя наш пример:

      OPEN SYMMETRIC KEY SK1 DECRYPTION BY CERTIFICATE Cert1;

DECLARE @tmp5k AS NVARCHAR(max);
SET @tmp5k = N'...5000 characters...';
SELECT EncryptByKey(Key_GUID('SK1'), CONVERT(VARBINARY(MAX), @tmp5k));
GO

А вот пример использования SQL для преобразования двоичного файла обратно в строку:

      CONVERT(VARCHAR(100), CONVERT(VARBINARY(100), @TestString)) AS StringFromBinaryFromString ;
Другие вопросы по тегам