Rails: сохранение зашифрованных данных в базе данных

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

P.S. Основная цель: если кто-то взломает сервер и украдет БД, он будет незашифрованным.

UPDATE: спасибо за nickh, я нашел очень много soultions для ActiveRecord, но ничего для монгольских и других монгольских клиет. Было бы здорово найти какую-то душу для Монго и Монгоида!

Ответы

Ответ 1

Я получил attr_encrypted, работая с Mongo и Mongoid. Требуется всего несколько настроек.

Убедитесь, что все поля encrypted_, которые автоматически создаются attr_encrypted, явно создаются в модели. Например, если у вас есть:

    attr_encrypted :email, :key => 'blah blah blah', :encode => true

вам нужно:

    field :email, :type => String
    field :encrypted_email, :type => String

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

Наконец, если вы шифруете хэш, сделайте следующее:

    field :raw_auth_hash, :type => Hash
    field :encrypted_raw_auth_hash, :type => String

    attr_encrypted :raw_auth_hash, :key => 'blah', :marshal => true, :encode => true

Ответ 2

У меня был большой успех с attr_encrypted gem. Тем не менее, я использовал его только с ActiveRecord. Я не знаю, работает ли он с MongoMapper или Mongoid.

Независимо от того, как вы это реализуете, я настоятельно рекомендую только шифровать определенные поля. Не шифруйте каждое поле в каждой таблице. Выполнение этого затруднит использование ассоциаций, поиск с использованием LIKE и т.д.

Ответ 3

Попробуйте mongoid-encrypted-fields gem - он бесшовна, поскольку он обрабатывает шифрование с использованием методов mongoize/demongoize.

Просто укажите свое поле как:

field :ssn, type: Mongoid::EncryptedString

Затем вы можете получить доступ к нему, как обычно, но данные хранятся в зашифрованном виде.

Ответ 4

http://ezcrypto.rubyforge.org/

Использование postgreSQL с ezcrypto gem atm - работает достаточно хорошо, хотя существуют ограничения в использовании ассоциаций между моделями с зашифрованными полями (это может быть, вплоть до моей неспособности найти правильную обновленную вилку этого проекта).

Зашифрованные поля хранятся в базе данных postgreSQL в виде типа данных BYTEA и обычно требуют, чтобы одиночные кавычки были экранированы (другая проблема с плагином),

PostgreSQL также имеет доступ к своему собственному шифрованию/расшифровке modeul 'pgcrypto', который также возвращает тип данных BYTEA. Не уверен, как это будет интегрироваться с Rails activerecord и ассоциациями между моделями (возможно, плохо: D).

Ответ 5

Я использую MongoDB в приложении с адаптером Mongoid ruby. Райан Бэйтс (полубог Rails) недавно выступил с выдающимся рельсом в этом выпуске http://railscasts.com/episodes/250-authentication-from-scratch.

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

Я также использовал attr_encrypted с большим успехом, но я не уверен, что он будет работать с MongoDB; использовал его только с помощью ActiveRecord.