2010-12-03 19 views
13

Quiero encriptar la base de datos porque se están almacenando datos confidenciales. Yo uso mongodb con mongoid. Es posible para este tipo de base de datos? ¿Y qué alternativas puede recomendar, si no es así?Rieles: almacenamiento de datos cifrados en la base de datos

P.S. El objetivo principal es: si alguien piratea el servidor y roba la base de datos, sería descifrable.

ACTUALIZACIÓN: gracias por nickh, encontré muchos soultions for ActiveRecord, pero nada para Mongoid y otros clinets de Mongo. ¡Sería genial encontrar algo de soul para Mongo y Mongoid!

+0

A menos que saque la llave privada del servidor y la almacene en otro lugar (es decir, su aplicación no necesita consumir los datos almacenados), una vez que es pirateado se ha terminado el juego. Solo un pequeño consejo de la experiencia. –

+1

Implemento DB en un servidor y la aplicación Rails en otro. Entonces la probabilidad de hack disminuyó en dos veces. Entonces, ¿es posible cifrar datos en DB on fly? – petRUShka

Respuesta

11

He obtenido attr_encrypted trabajando con Mongo y Mongoid. Solo requiere algunos retoques.

Asegúrese de que todos los campos encriptados que se crean automáticamente por attr_encrypted se creen explícitamente en el modelo. Por ejemplo, si usted tiene:

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

es necesario tener:

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

Observe también que necesita para indicarle que debe codificar la cadena cifrada de lo contrario Mongo se quejan en voz alta.

Por último, si estás cifrando un hash, hacer esto:

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

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

http://ezcrypto.rubyforge.org/

El uso de PostgreSQL con la atm joya ezcrypto - funciona razonablemente bien aunque hay limitaciones en el uso de las asociaciones entre los modelos con campos encriptados (esto quizás a mi incapacidad para encontrar la correcta tenedor hasta a la fecha de este proyecto).

Los campos codificados se almacenan en la base de datos PostgreSQL como el tipo de datos BYTEA y por lo general requieren de comillas simples que se escaparon (otro problema con el plug-in),

PostgreSQL también tienen acceso a su propio cifrado/descifrado modeul 'pgcrypto' que también devuelve un tipo de datos BYTEA. No estoy seguro de cómo esto se integraría con el registro activo de Rails y las asociaciones entre los modelos (probablemente mal: D).

8

He tenido mucho éxito con el attr_encrypted gem. Sin embargo, solo lo he usado con ActiveRecord. No sé si funciona con MongoMapper o Mongoid.

Independientemente de cómo implemente esto, recomiendo únicamente encriptar ciertos campos. No cifre todos los campos en todas las tablas. Hacer eso dificultará el uso de asociaciones, busque usando LIKE, etc.

+0

Gracias, pero ¿sabes algo especialmente para Mongoid u otros clientes de MongoDB? – petRUShka

+0

Fuera de mi cabeza, no lo hago. Sin embargo, si observa cómo se escribe attr_encrypted, solo se trata de escribir un adaptador Mongoid: https://github.com/shuber/attr_encrypted/tree/master/lib/attr_encrypted/adapters – nickh

0

Uso MongoDB en una aplicación con el adaptador ruby ​​Mongoid. Ryan Bates (el semidiós de Rails) recientemente realizó una excelente transmisión sobre este tema http://railscasts.com/episodes/250-authentication-from-scratch.

Estoy usando esto en una aplicación MongoDB y funciona perfectamente para el cifrado de datos. Su video tutorial es principalmente para encriptar contraseñas, pero puede adaptarlo a cualquier otro valor de campo que desee.

También he utilizado attr_encrypted con mucho éxito, pero no estoy seguro si funcionará con MongoDB; solo lo usé con ActiveRecord.

7

Pruebe la gema mongoid-encrypted-fields - es transparente ya que maneja el cifrado usando métodos mongoize/demongoize.

Sólo definir el campo como:

field :ssn, type: Mongoid::EncryptedString 

A continuación, puede acceder a ella como normal, pero se almacena los datos codificados.

Cuestiones relacionadas