これは、「サービスとしてのソフトウェア」スタイルアプリケーションの「マルチテナントアーキテクチャ」の構築に関する質問であるとしています。
最初の問題は、データベースを分離することが良い考えであるかもしれないし、そうでないかもしれないということです。しかし、それは最初の質問ではありません。この問題が発生しているレベルでデータベースにアクセスできる人は、すでにデータベースサーバー上で任意のコマンドを実行する可能性があります。つまり、1つのアカウントの損害だけでなく、インフラストラクチャ全体への損害にも対応しています。それは "消灯"の瞬間であり、あなたが回復している間はシステム全体をシャットダウンする必要があります。
データベースサーバーにシェルが設定されていない場合は、アプリケーション層のセキュリティの問題、つまりSQLインジェクション、または認証スキームの権限のエスカレーション方法があることを意味します。再び、どちらも「消灯」の瞬間です。
したがって、すべてのものが完全に覆われていることを確認してください。開発ライフサイクルにセキュリティテストを含める。継続的統合システムの一部として自動化された侵入テストツールを使用することを検討してください。インフラストラクチャのメンバーが環境全体を強化し、リリース候補に近づいたときに第三者のセキュリティ監査を受けることを検討してください。セキュリティ上の問題に焦点を当てたコードレビュープロセスを検討し、特定のセキュリティ上の考慮事項でコーディング標準に同意する。すべての開発者にクロスサイトスクリプティング、SQLインジェクションおよびその他のアプリケーションレベルの脆弱性について教えてください。
すべてを済ませたら、ドアをロックして窓をボルトで止めました。あなたのデータベース戦略は、ジュエリーを安全に保つ方法と同じです。
個別のデータベースにはセキュリティがいくつか追加されていますが、それにはユーザー管理に対応する戦略がある場合に限ります。ほとんどのWebアプリケーションでは、「admin」と「web app」の2種類しかありません。 "管理者"は、データベースの作成/変更(データベース、テーブル、ビューなどの作成)を行うことができ、通常はデータも変更できます。 "Webアプリケーション"にはデータ変更権限のみが必要ですが、データベースオブジェクトを変更する権限はありません。
意味をなすために、データベースを分割するために、あなたはそれを確認する必要があります。
- 彼らができる場合は、有効なユーザー名とパスワードへのアクセスを得ることができないWebアプリケーションのファイルシステムへのアクセスを取得、またはすることができます攻撃者は、 1クライアントのみ。攻撃者は、「管理者」の資格情報
へのアクセスを得ることはできない
しかし、それはあなたのデータベースを分割することは理にかなって(セキュリティを越えて)他の理由があります。これは、人的ミスのリスクを軽減し、より細かいレベルでシステムを拡張することができます。また、さまざまなレベルのホスティング(「ゴールド」ユーザーは独自のサーバーを取得し、「シルバー」は独自のデータベース」、ブロンズ"彼らのチャンスを取る)。 これを実現するために解決しなければならない大きな問題は、展開です。データベースに変更を加えて、新しいバージョンのコードをどのように展開しますか?これは、テストプロセスを複雑にする可能性があります。
サーバーごとに完全に別個のサーバーを使用すると、サーバーの妥協がすべての企業データへのアクセスを提供します – Anigel
「デプロイ先」と言えば、サーバー上で実行していることを意味しますか、 「サービスとしてのソフトウェア」として? –
もいくつですか?これが数回(多分数十)あれば、別々の環境でかなりうまく管理することができます。数百になると、おそらく問題が残るでしょう。 – Randy