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.