それは両方の混合物です。2つの既存の回答(これを書いた時点でhttps://stackoverflow.com/a/10718397/1015483とhttps://stackoverflow.com/a/10718459/1015483)が有効です-約5つの方法を見る必要があります私が考えることができる可能な攻撃
- 彼らはあなたのDBサーバーにアクセスできます。はい、妥当な範囲でその赤ちゃんを確保してください (マットの回答)
- スタンドアロンのデータ ハイジャック (誰かが別の方法でデータベース データにアクセスする、バックアップである可能性、パスワードを推測する可能性がある、ある場所から別の場所にデータを転送する場合の MITM である可能性があります)。このために、データを暗号化します。また、何らかの理由で CSV ダンプを作成し、誰かに電子メールで送信することもできます。おっと。しかし、それは起こります。だから暗号化する(vlzvtの答え)
しかし、言及されていない3つの要素:
- 彼らはあなたのウェブサーバーにアクセスする可能性があります(DBサーバーとは異なる場合)。彼らがウェブサーバーにアクセスできる場合、彼らはあなたのパスワード、暗号化キーをたくさん持っているので、すべての賭けはオフです. そのため、DB サーバーよりもさらに安全にする必要があります。(マットは上記のことを意味していたかもしれませんが、明確にしてください)
- 上記と同様ですが、忘れてはならないのは、誰かが phpMyAdmin または管理領事館にアクセスした場合です。アクセスに平文の認証または構成に保存されたパスワードを使用しないでください。
- 最後に、アプリケーション自体があります (そしてロックダウンが最も困難です)。データを明らかにする可能性のある SQL インジェクションを防ぐ必要があります。誰かがトラップされていないクエリを介してアクセスした場合、データを暗号化すると問題を最小限に抑えることができなくなります。そのため、暗号化が解決策です。
あなたの質問のパート2について:
MySQL の暗号化/復号化機能を使用すると、未加工データにアクセスできる人を阻止できますが、MITM や SQL インジェクション、さらには転送用に取得された CSV ダンプにはアクセスできません。
したがって、IMO (これは私の意見であり、私が行った方法にすぎません) は、PHP で暗号化し、暗号化されたデータをネットワーク経由で盗み出すことです。これにより、データをトラップするすべての方法が停止し、CSV ダンプが「スクランブルされます」 "。
そうする場合は、phpMyAdmin で誤って読み取り/編集しようとするのを防ぐため、varbinary / blob タイプを使用することもできます。Plus は、名目上数バイトを節約できる可能性があります (ただし、これはインデックスやその他のものに依存しますが、それだけでは勝利の議論にはなりません)。
そして今、マイナス面:検索とソート。インデックス化または検索するものはすべて、暗号化されている場合、大文字と小文字が区別され、正しい長さにパディングされた文字列全体とのみ一致します (通常、検索では大文字と小文字が区別されず、LIKE を使用して部分検索を実行できます)。また、ORDER BY を実行する場合は、元の文字列が必要です。そのため、構造を設計するときは心に留めておいてください。
それが役立つことを願っています。