Всегда зашифрованная функция - не удалось расшифровать столбец. Звонок из Windows-Service App

.NET Framework версия = 4.6.2, база данных = SQL Server 2016

Тип приложения = Служба Windows

Мы работаем над функцией "Всегда зашифровано" в базе данных SQL 2016, чтобы выполнить шифрование определенных столбцов данных клиента. Наше веб-приложение построено на архитектуре ASP.NET MVC и прекрасно работает с этой новой функцией. Мы скопировали и импортировали сертификат с сервера базы данных на веб-сервер IIS. И веб-приложение работает без сбоев.

Но когда мы пытаемся получить доступ к БД из приложения-службы Windows, запущенного на отдельном сервере, оно выдает следующее исключение.

Не удалось расшифровать столбец 'ColumnX'. Не удалось расшифровать ключ шифрования столбца с помощью поставщика хранилища ключей: 'MSSQL_CERTIFICATE_STORE'. Последние 10 байтов зашифрованного ключа шифрования столбца: '76 -34-51-DA-41-8F-52-D1-A1-EE '. Keyset не существует

Мы скопировали и импортировали тот же сертификат с аналогичными шагами на сервер, на котором запущено приложение windows-service.

Пожалуйста, предложите, если я что-то упустил в установке сертификата. Нужно ли редактировать какие-то свойства в установленном сертификате?

3 ответа

Решение

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

Из сообщения Keyset does not exist Я предполагаю, что вы импортировали ключи только частично или только одну часть набора.

редактировать
У вас есть доступ к этим предметам?%ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeysИЛИ ЖЕC:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

Обычно, когда закрытый ключ отсутствует или имеется некоторая ошибка разрешения для доступа к папке MachineKey (реестр). Это дает "Keyset does not exist" ошибка.

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

Запустите консоль MMC и добавьте оснастку сертификата локальной машины.

Найдите сертификат Always Encrypted в личной папке, откройте контекстное меню и нажмите «Управление закрытыми ключами».

Добавьте пользователя, который использует этот сертификат в вашей БД, и предоставьте ему полный контроль над этим ключом.

Другие вопросы по тегам