Всегда зашифрованная функция - не удалось расшифровать столбец. Звонок из 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 в личной папке, откройте контекстное меню и нажмите «Управление закрытыми ключами».
Добавьте пользователя, который использует этот сертификат в вашей БД, и предоставьте ему полный контроль над этим ключом.