Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья содержит решение проблемы, которая приводит к сбою клиентского приложения платформа .NET Framework 4.6.2 при доступе к данным из базы данных с поддержкой Always Encrypted.
Исходная версия продукта: SQL Server 2016, SQL Server 2017
Исходный номер базы знаний: 3204545
Симптомы
У вас есть клиентское приложение, использующее поставщик данных платформа .NET Framework для Microsoft SQL Server (Sqlclient), которое входит в состав Microsoft платформа .NET Framework 4.6.2. Это приложение используется для подключения к базе данных с поддержкой Always Encrypted, работающей в Microsoft SQL Server 2016, SQL Server 2017 в Windows или База данных SQL Microsoft Azure.
При попытке расшифровки записей из базы данных с поддержкой Always Encrypted вы получаете периодические сообщения об ошибках, похожие на следующую ошибку:
Сбой расшифровки. Последние 10 байтов зашифрованного ключа шифрования столбца: 7E-0B-E6-D3-39-CE-35-86-2F-AA. Первые 10 байт шифров: 01-C3-D7-39-33-2F-E6-44-C3-B1. Указанный зашифрованный текст имеет недопустимый тег проверки подлинности.
При возникновении этой проблемы запросы к столбцам, защищенным параметром Always Encrypted , могут отображать неправильные результаты, например слишком мало записей. Это, в свою очередь, может привести к неправильному поведению. Например, клиентское приложение пытается вставить отсутствующие значения или запустить другие процессы обновления, которые создают дополнительные ошибки или вызывают несогласованные данные в базе данных.
Решение
Чтобы устранить эту проблему, установите обновление безопасности из бюллетеня майкрософт по безопасности MS16-155.
Обходное решение
Внимание
Если клиентское приложение размещено через веб-приложения в службе Microsoft приложение Azure, клиент автоматически использует платформа .NET Framework 4.6.2. Таким образом, вы можете столкнуться с проблемой, указанной в разделе "Симптомы ". В этом сценарии можно использовать только обходное решение метода 2 ("Отключить шифрование столбцов") в этом разделе, пока не будет выпущено исправление этой проблемы.
Чтобы обойти эту проблему, следуйте приведенным ниже рекомендациям:
Клиент .NET еще не обновлен до версии 4.6.2
В средах, упомянутых в разделе "Симптомы", рекомендуется не обновляться до платформа .NET Framework 4.6.2 до устранения этой проблемы. Эта проблема не влияет на более ранние версии драйвера.
Клиент .NET уже обновлен до версии 4.6.2
Используйте один из следующих методов:
Метод 1. Откат версии платформа .NET Framework
Удалите платформа .NET Framework 4.6.2 из клиентских приложений системы. Это заставляет приложения использовать старую версию поставщика данных NET Framework для SQL Server, которая не испытывает этой проблемы. Для этого выполните следующие шаги.
- В панель управления откройте элемент "Программы", а затем выберите "Программы и компоненты".
- Выберите "Просмотр установленных обновлений", а затем удалите центр обновления для Microsoft Windows KB3120737.
Примечание.
Мы рекомендуем после удаления любой версии платформа .NET Framework протестировать приложения, зависящие от платформа .NET Framework. Эти приложения могут работать неправильно, если удалить версию платформа .NET Framework, от которых они зависят.
Метод 2. Отключение кэширования ключа шифрования столбцов
Если вы не можете откатить установку платформа .NET Framework, отключите кэширование ключа шифрования столбца (CEK). Для этого задайте свойству SqlConnection.ColumnEncryptionKeyCacheTtl в клиентском приложении значение 0. Например, выполните следующий код, чтобы отключить шифрование столбцов в приложениях C#:
System.Data.SqlClient.SqlConnection.ColumnEncryptionKeyCacheTtl = TimeSpan.Zero
После использования любого из методов убедитесь, что ошибка не возникает во время проверки таблицы (например, SELECT * FROM <таблицы с Always Encrypted>), которая выполняется из окна запроса в SSMS через подключение к базе данных с параметром шифрования столбцов=Включено в строка подключения. При выполнении такой проверки проверяется правильное шифрование.
Внимание
Пользователи, которые испытывают проблему, описанную в разделе "Симптомы " во время проверки проверки, должны связаться sqlalwaysencrypted@microsoft.com. Группа поддержки может помочь восстановить все ранее зашифрованные строки, затронутые этой ошибкой. Эта ошибка не приводит к постоянной потере данных.