web-dev-qa-db-ja.com

セキュリティ/匿名性を強化するためにデータベースを分割しますか?

ここでの目標は、ユーザーとそのデータの識別を防ぐことです。データベースを、機密データの種類ごとに1つずつ、複数のデータベースに分割し、それらの間のリンクを非表示にすることをお勧めしますか?

データとユーザー間の関係を構築し、それらを識別するために、攻撃者はすべてのデータベース(異なるサーバー/ VM /コンテナーから提供される可能性がある)にアクセスする必要があるため、最初は答えは「はい」のようです。

もちろんそうすることはアプリケーション層に多くの複雑さを加えるので、これがまったく良い考えかどうか疑問に思います。

EDIT:これはより具体的な例です。

プロジェクトはウェブサイトです。アプリケーションコードはサーバーAで実行されます。接続は、アプリケーションからデータベースB1、DB2、DB3へ、それぞれホストB、C、Dで行われます。暗号化はまったく行われません(もちろんパスワードを除く)。アプリケーションコードは、3つのデータベースすべての資格情報を保持します。 「セキュリティのボトルネック」があり、それがサーバーAです。その上、データ間の関係は別のデータベースに保存されず、3つのデータベースに分割されます。

enter image description here

これは悪いデザインですか?セットアップしたほうがいいですか

  1. 1つのデータベース(サーバーE内)のみで、サーバーAとEを厳密に保護しますか?または
  2. データ間のリンクを保持するための別のデータベース、さらに可能なユーザーの識別を遅らせる?

考慮すべき他のソリューション?

サーバーAが単一障害点/セキュリティのボトルネックであることを考えると、このいずれかが役立つでしょうか?

2
pawamoy

脅威は十分に明確に定義されていません。ユーザーとそのデータの識別を防止したいとおっしゃいましたが、だれが言ったのではありませんでした。チームメイト?あなたのホスティングプロバイダー?ランダムな攻撃者?あなたのデータに興味があり、標的型攻撃をしようとする人はいますか?

基本的に、アプリケーションとそれを実行しているサーバーのボトルネックがあることを認めました。したがって、データベースを分割するという考えは、データベースを攻撃する脅威に対してのみ機能し、アプリケーションを攻撃することはできません。これらはどのような脅威ですか?今のところ、多くの例を考えることはできません。多分、泥棒がデータベースのバックアップを盗む脅威です。バックアップが別の場所にある場合、それらすべてを盗む可能性は低くなるため、泥棒がすべてのデータを取得する可能性は低くなります。しかし、バックアップはとにかく暗号化する必要があるので、適切な暗号化手法が使用されている場合、複数のデータベースを使用するシステムの実装に時間を浪費するのはなぜですか?また、アプリケーションに複雑さを追加すると、バグの可能性が高まることを考慮します。その一部は、追加の脆弱性につながる可能性があります。

ですから、私の意見では、問題はもう一度です。データベースではなく、アプリケーションでは危険にさらされる脅威は何ですか。この質問に答えると、全体の状況がより明確になります。

1
reed

後でデータを結合できるエンティティは、おそらく「セキュリティ」のボトルネックになります。

もちろんあなたは関係を持つことができます:

       user
     /      \
    A        B

攻撃者がAまたはBにアクセスできるか、または両方にアクセスできることを願っていますが、誰かが何らかの方法でこれをつなぎ合わせる方法についての知識が必要であり、そこがボトルネックになります。ただし、誰かがなんとかボトルネックを攻撃できたとしましょう。ユーザーがデータセットのリンクを取得できるだけで、必ずしもデータ自体にアクセスできるわけではありません。 3つのサーバーA、B、Rがあり、A、Bが生データを格納し、Rが関係を格納しているとします。どのようにアクセス制御を行いますか?データを暗号化して、ユーザー自身だけが情報を解読して、つなぎ合わせることができるようにしますか? AとBはあなたが誰であるかを知らないので、WHOを保存すると、AとBのどのデータにアクセスできるので、すでにユーザーに再度リンクしているので、それらのデータセットのアクセス制御を実際に行うことはできません。

次に、アプリケーションはどのようにデータにアクセスしますか?データに対して計算を実行する必要がありますか?関係がわからない場合はどうすればよいでしょうか。

私にとって...これは広すぎる。特定のシナリオでは意味のある答えが得られるかもしれませんが、一般的なケースではおそらくないでしょう。

1
mroman

これは、セキュリティの絶対的な方法では決してない、あいまいさからのセキュリティに該当すると思います。誰からデータを隠そうとしていますか?エンドユーザーにとっては違いはありません。

開発者とシステム管理者は、おそらくすべてのデータベースにアクセスできます。あなたが別のVMまたはコンテナーからサービスを提供している場合、私はハッカーとしてハイパーバイザーまたはコンテナーのホストでrootを獲得したため、それらすべてにrootアクセスできます。

DBサーバーが異なるプロバイダーによってホストされている場合、おそらく、同じOSと同じDBシステムをそれぞれの個別のDBサーバーで実行すると、ハッカーは1つのDBサーバーでエクスプロイトを見つけ、他のどのサーバーにも適用できることを発見します。パッチを適用する必要があるサーバーの数を増やすだけです。そうしないと、各プロバイダーに別々のosバージョンとdbバージョンがあり、特定のバージョン依存関係の恐ろしい動作が発生したり、セキュリティパッチを管理する必要のあるさまざまなサーバーの数を増やしたりする可能性があります。

1
user618509