2012-02-22 4 views
5

Я ищу, чтобы использовать шифрование базы данных в базе данных, к которой я подключаюсь в своем приложении через. Entity Framework.Шифрование SQL Server 2008 R2 - с платформой Entity

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

Я планирую использовать Symmetric Key и тройной алгоритм шифрования DES.

+0

Итак, это касается хранения зашифрованных данных, а не защищенного канала? –

+0

Да, хранение зашифрованных данных. –

ответ

5

Что вы подразумеваете под SQL Server 2008 R2 Шифрование - это очень неопределенный вопрос, потому что он имеет много значений.

Ваши общие параметры:

  • Прозрачное шифрование данных - Особенность SQL Server - вся база данных шифруется на стороне SQL Server. Ваше приложение не нуждается в изменении, и оно должно работать с EF.
  • Шифрование уровня ячейки - функция SQL Server - выделенные столбцы шифруются и сохраняются как varbinary. Для этого требуются специальные команды запроса и хранения, поэтому вам нужно будет использовать специализированные представления базы данных и хранимые процедуры для взаимодействия с вашей БД, если вы хотите использовать EF. Если вы не хотите использовать представления базы данных и хранимые процедуры, вам придется поддерживать EDMX вручную и записывать все эти команды SQL в свою часть SSDL.
  • Шифрование, выполняемое в вашей заявке - вы будете использовать события ObjectMaterialized и SavingChanges, чтобы обрабатывать дешифрование и шифрование самостоятельно. Вероятно, вы сможете зашифровать и дешифровать только строковые или двоичные данные, потому что ваш тип данных свойства не должен меняться (в случае строки вам придется хранить зашифрованное значение в качестве строки base64).
+0

Спасибо за ваш тщательный ответ. Я уже отказался от TDE, так как он не обеспечит необходимый уровень шифрования. Я также не хочу шифровать в своем приложении, поскольку я считаю, что это не так выгодно, как шифрование sql. Похоже, что второй вариант, который вы детализируете, - это то, что мне нужно будет сделать - поскольку я не думаю, что с EF есть другой способ, который будет работать так, как я этого хочу. –

+0

@Ladislav Mrnka: для шифрования на уровне клеток, если вы использовали SP и Views для взаимодействия с БД, что мешает хакеру использовать одни и те же SP/Views при расшифровке ваших данных? – ribald

+1

@ribald: речь идет о зашифрованном на диске данным. Если злоумышленник получает учетные данные для доступа к вашей базе данных через обычное соединение, мало что может сделать для шифрования данных на любом уровне прозрачного или клеточного уровня на уровне базы данных. –

0

Вы можете создать представление, которое возвращает дешифрованные данные.

Например:

CREATE VIEW [your_view_name] as 
SELECT 
CONVERT(varchar(200),DECRYPTBYPASSPHRASE('[your_symmetric_key]', [encrypted_field])) As [encrypted_field], 
FROM [your_table_name] 

Затем добавьте ваш взгляд как объект в модели EF.

Чтобы вставлять, обновлять или удалять операции, используйте хранимые процедуры.

+0

Это означает жесткое кодирование симметричного ключа в правиле определения вида? Также любой, у кого есть доступ к представлению, сможет его просмотреть. –

+0

Моя парадная дверь там, и она разблокирована, но на всякий случай вам это нужно. – Tony

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