2013-09-19 5 views
1

Я пытаюсь использовать SecurEntity для реализации шифрования столбца для некоторых таблиц в моем приложении.Проблема шифрования столбца Entity Framework

Я использую Injection Dependency для инъекции одного экземпляра DbContext в мои все мои репозитории.

Класс DbContext имеет событие, связанное с обработчиком события SaveChanges, которое вызывает метод SecurEntity Encrpyt, если сохраненные изменения сохраняются на объекте, который должен быть включен.

Также есть событие, связанное с обработчиком событий ObjectMaterialized, который расшифровывает зашифрованные объекты, когда они изначально извлекаются из базы данных.

Когда я отлаживаю приложение во время входа в систему, объект User (который является одной из таблиц, которые следует зашифровать), объект User извлекается из базы данных и успешно дешифруется. Затем он имеет несколько свойств, таких как дата последнего входа, и эти изменения сохраняются и затем зашифровываются успешно.

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

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

Есть ли у кого-нибудь идеи, как я могу обойти это? Я разрабатываю приложение, которое будет размещено на Azure, поэтому прозрачное шифрование данных не является для меня вариантом, и мне нужно реализовать некоторую форму шифрования.

+2

Помните, что текущая реализация SecurEntity имеет фатальный недостаток безопасности, что означает, что ключ, сгенерированный из сертификата, на самом деле никогда не используется. Для быстрого и грязного исправления см. Https://securentity.codeplex.com/workitem/7376 –

ответ

0

Веб-приложения не должны содержать экземпляр DbContext, висящий вокруг. DbContext должен жить и умирать во время запроса (aka get Disposed, как только запрос выполняется с ним). Проверьте, как сконфигурирована ваша инъекция зависимостей, вы ни в коем случае не должны использовать DbContext как singleton (один экземпляр для всего приложения).

+0

Спасибо за ваш ответ Barisa. Я использую Ninject и настроил его на использование «InRequestScope». Я считаю, что это означает, что экземпляр создается для HTTP-запроса. Должен ли я избегать этого? –

Смежные вопросы