2010-12-03 32 views
13

機密データが保存されているため、データベースを暗号化します。私はモンゴイドとモンゴブを使用します。この種のデータベースは可能でしょうか?そうでない場合、どのような選択肢がありますか?Rails:暗号化されたデータをデータベースに格納する

P.S.主な目的は、誰かがサーバーをハックしてDBを盗むと、暗号化が解除されることです。

更新:nickhありがとうございました。私は非常に多くを見つけましたsoultions for ActiveRecordしかし、モンゴイドと他のモンゴークリケットでは何も見つかりませんでした。モンゴーとモンゴイのためにいくつかの魂を見つけることは素晴らしいことでしょう!

ezcrypto宝石のATMでPostgreSQLの使用
+0

サーバーから秘密鍵を取り出して別の場所に保管しない限り(つまり、アプリケーションが保存されたデータを消費する必要はありません)、ハッキングされるとゲームが終了します。経験からちょっとしたアドバイス。 –

+1

DBをあるサーバーに、Railsアプリケーションを別のサーバーにデプロイします。したがって、ハックの可能性は2回に減少しました。それで、飛行中にDBのデータを暗号化することは可能ですか? – petRUShka

答えて

11

私はattr_encryptedをMongoとMongoidで使用しています。ほんの数回の調整が必要です。

は自動的にattr_encryptedによって作成され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 
1

http://ezcrypto.rubyforge.org/

- 制限が暗号化されたフィールドを持つモデル間の関連付けを使用してありますが、合理的にうまく機能(この多分の正しい最新のフォークを見つけるために私のできないことへのダウンこのプロジェクト)。

暗号化されたフィールドがBYTEAデータ型としてPostgreSQLのデータベースに格納されており、通常はエスケープするための単一引用符のために(プラグインで別の問題)が必要になり、PostgreSQLはまた、独自の暗号化/復号化へのアクセス権を持っているん

modeul 'pgcrypto'またBYTEAデータ型を返します。これがRailsのactiverecordやモデル間の関連付けとどのように統合されるのかはわかりません(おそらくひどく:D)。

8

私はattr_encrypted gemで多くの成功を収めました。しかし、私はActiveRecordでのみ使用しました。 MongoMapperやMongoidで動作するかどうかはわかりません。

これを実装する方法に関係なく、特定のフィールドのみを暗号化することを強くお勧めします。すべてのテーブルのすべてのフィールドを暗号化しないでください。そうすることで、関連付けやLIKEなどを使った検索が難しくなります。

+0

ありがとうございますが、特にMongoidや他のMongoDBクライアントについて何か知っていますか? – petRUShka

+0

私の頭の上から離れて、私はしません。しかし、attr_encryptedがどのように書かれているかを見ると、それは単なるモンゴイド・アダプターの作成の問題です: https://github.com/shuber/attr_encrypted/tree/master/lib/attr_encrypted/adapters – nickh

0

MongoDBをMongoid Rubyアダプター付きのアプリで使用します。ライアン・ベイツ(Railsの反逆者)は最近、この問題についての卓越したレールキャストをhttp://railscasts.com/episodes/250-authentication-from-scratchで行った。

私はMongoDBアプリケーションでこれを使用しており、データの暗号化には最適です。彼のチュートリアルビデオは主にパスワードを暗号化するためのものですが、他のフィールド値にも適用できます。

私も多くの成功とattr_encryptedが、私はそれがMongoDBので動作するかどうかはわからない使用しています。 ActiveRecordでのみ使用しました。

7

mongoid-encrypted-fields宝石を試してみてください - それはmongoize/demongoizeメソッドを使用して暗号化を扱うようにシームレスです。

同じように、あなたのフィールドを定義します。そして、あなたは、通常のようにアクセスすることができます

field :ssn, type: Mongoid::EncryptedString 

が、データが暗号化され保存されています。

関連する問題