Rails: хранение зашифрованных данных в базе данных - PullRequest
13 голосов
/ 03 декабря 2010

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

PS Основная цель: если кто-нибудь взломает сервер и украдет БД, это будет неприемлемо.

ОБНОВЛЕНИЕ: спасибо за nickh , я нашел очень много подвигов для ActiveRecord , но ничего для Mongoid и других монго-клинеттов.Было бы здорово найти душевное настроение для Монго и Монгоида!

Ответы [ 5 ]

11 голосов
/ 14 июля 2011

Я получил 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

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

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

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

    attr_encrypted :raw_auth_hash, :key => 'blah', :marshal => true, :encode => true
8 голосов
/ 03 декабря 2010

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

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

7 голосов
/ 11 апреля 2013

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

Просто определите свое поле следующим образом:

field :ssn, type: Mongoid::EncryptedString

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

1 голос
/ 03 декабря 2010

http://ezcrypto.rubyforge.org/

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

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

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

0 голосов
/ 30 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...