Я пытаюсь реализовать функцию Always-Encrypted для нескольких столбцов базы данных MS SQL Server 2016. Фактически, я успешно реализовал его в своей базе данных UAT. Однако при попытке выполнить те же действия в моей производственной БД я получаю следующую ошибку:
Set-SqlColumnEncryption: не удалось расшифровать ключ шифрования столбца с помощью поставщика хранилища ключей: «MSSQL_CERTIFICATE_STORE». Последние 10 байтов ключа шифрования зашифрованного столбца: «xx-xx-xx-xx-xx-xx-xx-xx-xx-xx». Набор ключей не существует
Некоторые подробности: я выполняю команду
Set-SqlColumnEncryption -ColumnEncryptionSettings $l_columnEncryptionSettings -InputObject $l_database
внутри пауэршелл. Главный ключ столбца находится в пользовательском хранилище ms sql учетной записи, в которой запущен процесс. Его можно увидеть в certmgr в разделе «Сертификаты — Текущий пользователь\Личные\Сертификаты», и он содержит как открытый, так и закрытый ключ (отображение информации о сертификате показывает «у вас есть закрытый ключ, соответствующий этому сертификату»).
Глядя на записи Always-Encrypted Keys
в БД, Column Master Key
отображается с ключевым путем CurrentUser/my/<fingerprint>
, где <fingerprint>
действительно соответствует отпечатку пальца сертификата в MSSQL_CERTIFICATE_STORE.
Я видел этот вопрос (Функция Always Encrypted - Не удалось расшифровать столбец. Вызов из приложения Windows-Service), но "решение" там либо не применяется (я импортировал открытый и закрытый ключ в хранилище), либо неясно (упоминается «доступ» к каталогу, но подробности о том, какой доступ не предоставляется, и учетная запись, с которой я имею дело, действительно имеют доступ для чтения к указанному каталогу.)
Что самое странное, так это то, что я уже успешно реализовал его на той же машине для БД UAT (разные БД, тот же экземпляр SQL, другой пользователь), но я не вижу различий между двумя настройками.
Кто-нибудь знает, что может быть причиной этой ошибки или как ее исправить? Спасибо.
Редактировать: Когда я задал этот вопрос, проблема оказалась в неправильной настройке функции, поэтому вопрос был разумным. При дальнейшем расследовании (см. ниже) выяснилось, что это повреждение данных, так что никто, кроме меня, не мог ответить на этот вопрос.