Rails:将加密数据存储在数据库中

pet*_*hka 13 database encryption activerecord ruby-on-rails mongodb

我想加密数据库,因为存储了机密数据.我用mongodb和mongoid.这种数据库有可能吗?如果不是,你可以推荐哪些替代方案?

PS主要目的是:如果有人破解服务器并窃取数据库,那将是无法加密的.

更新:感谢nickh,我发现ActiveRecord有很多灵魂,但Mongoid和其他Mongo clinets没有.为Mongo和Mongoid找到一些灵魂会很棒!

Bre*_*edt 11

我已经使用attr_encrypted与Mongo和Mongoid一起工作了.它只需要几个调整.

确保在模型中显式创建由attr_encrypted自动创建的所有encrypted_字段.例如,如果你有:

    attr_encrypted :email, :key => 'blah blah blah', :encode => true
Run Code Online (Sandbox Code Playgroud)

你需要:

    field :email, :type => String
    field :encrypted_email, :type => String
Run Code Online (Sandbox Code Playgroud)

另请注意,您需要告诉它对加密字符串进行编码,否则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
Run Code Online (Sandbox Code Playgroud)


nic*_*ckh 8

我在attr_encrypted gem上取得了很大的成功.但是,我只在ActiveRecord中使用它.我不知道它是否适用于MongoMapper或Mongoid.

无论你如何实现这一点,我强烈建议只加密某些字段.不要加密每个表中的每个字段.这样做会很难使用关联,使用LIKE搜索等.


Bra*_*d R 7

尝试mongoid-encrypted-fields gem - 它是无缝的,因为它使用mongoize/demongoize方法处理加密.

只需定义您的字段:

field :ssn, type: Mongoid::EncryptedString
Run Code Online (Sandbox Code Playgroud)

然后您可以像平常一样访问它,但数据是加密存储的.