web-dev-qa-db-ja.com

SQL Serverは、IISインストールと同じマシン上にある必要がありますか?

私はポッドキャスト#19を聴いていますが、JoelとJeffは、IISインストールと同じマシンでSQLServerを実行することについて議論しています。JeffがJoelに折りたたまれているように聞こえますが、それからまた私はどちらがどれであるかを推測しているだけです。;)

それぞれの長所と短所は何ですか?どちらが良いですか?

私は通常、それらを別々に実行します(Joelの好み)が、2つが互いに近いというJeffのポイントを見ることができます。

22
Jason

セキュリティの目的 Webマシンとデータベースマシンを分離することをお勧めします。できれば、2つの間にファイアウォールを配置します。 Webサーバーは世界全体に公開されています。残念ながら、これらのサーバーに含まれる情報を盗んだり、損傷したりすることに喜びを感じる人がいます。

次に、パフォーマンスの側面があります。 SQLServerがメモリを愛していることは常識です。 IISもそうです。特に、Webサイトがキャッシュとセッション情報を広範囲に使用している場合はそうです。したがって、ここでも潜在的な競合が発生します。 SQL Server専用のマシンを使用する方が、単一のマシンですべての負荷を実行するよりも明らかに優れています。

次に、分離により、調整の必要性をより簡単に識別および個々のハードウェアコンポーネントを調整する機能が可能になります。

要約すると、ライブ環境でIISとSQLServerの両方の要求に対応するのに十分強力なマシン必ずしも2台のマシンよりも安いとは限りません各サーバーの特定の要件。(ポッドキャストの1つでJeff Atwoodが言及したように、1台のマシンをアップグレードすると2台目のマシンを取得するのと同じコストがかかります)

45
splattne

@MarkR

SQL Serverを別のボックスに移動することでセキュリティが実際に強化され、攻撃対象領域が公開されます。

Webサーバーは、インターネットからの悪意のあるアクセスにさらされています。それが決して起こらないことを願っていますが、ファイアウォールを通過する不正な形式の要求を介して悪用される可能性のある脆弱性がありました(そして将来的にはそうなる可能性があります)。

これらの脆弱性の1つを悪用すると、任意のコードが実行される可能性があります。

この方法でWebサーバーが危険にさらされた場合、そのマシンで実行される他のすべてのものが脆弱になり、エクスプロイトソフトウェアが特権コンテキストで実行される可能性があります。侵害されたマシンの攻撃対象領域ははるかに広くなっています。

SQL Serverが同じマシンにインストールされている場合、どのデータベースも脆弱です。

現在、SQL Serverが別のマシンにインストールされている場合、SQLServer自体にはパブリックインターフェイスを介してのみアクセスできます。データベースのアタッチサーフェスは、そのインターフェイスに制限されています。したがって、データベースを侵害するには、最初にWebサービスを侵害し、次にSQLServerを侵害する必要があります。これは、同じマシン上に配置するよりもはるかに困難です。

原則をさらに拡張すると、ストアドプロシージャを使用するための引数にもなります。 Webサーバーがストアドプロシージャを使用してデータベースサーバーにのみアクセスできる場合、インターフェイス、つまり攻撃対象領域は大幅に制限されます。 Webサーバーがデータベースサーバーに対して任意のSQLを実行できる場合、攻撃対象領域は必要以上に大きくなり、データへのリスクが大幅に増加します。

データが貴重なシステムでは、これらのリスクは比較的小さいものの非常に現実的であり、そのようなリスクのビジネスエクスポージャーを決定することはソリューション設計の重要な側面です。

12
Steve Morgan

それらを同じマシンに置く:

  • それらの間の待ち時間を短縮します-したがって、簡単なクエリがたくさんある場合、これによりパフォーマンスを向上させることができます
  • 単一のボックス(またはVM)で実行できるため、開発とパフォーマンスのテストが容易になります

アプリケーションが冗長性を必要とせず、スケールアウトする必要がない場合、それらを同じボックスに配置することは間違いなく勝利です-保守がはるかに簡単です。

セキュリティの議論に重要性はないと思います。それらを分離することによるセキュリティ上の利点は見当たりません。とにかくすべてまたはほとんどのデータを表示および変更するには、Webサーバーがデータベースに十分にアクセスできる必要があるため、完全に侵害された場合、SQLボックスも事実上侵害されます。

11
MarkR

非常に機密性の高いサイトの場合、ファイアウォールを間に挟んだ個別のサーバーの利点は役立ちますが、多くの問題が発生します。

  1. 分割時のクエリのパフォーマンスIIS-ネットワークを介してデータを渡す必要があるため、SQLサーバーの実行速度が非常に遅くなる可能性があります。また、サーバーが2フィート離れている場合でも、DNSが要因となる可能性があります。アプリケーションを分割して機能させるために行うべきいくつかの作業。
  2. 管理。当たり前のことかもしれませんが、その2つのサーバー、2つのWindowsライセンス、関連する管理、およびファイアウォールの通過の複雑さです。

分割サーバーの推奨事項:

  1. サーバー間にギガビットLANをインストールします。
  2. 代わりにストアドプロシージャとして実行するように最適化されたクエリ
  3. クエリを最適化して、最小限のデータのみを返すようにします。
  4. サーバー間アドレッシングがIPアドレスまたは効果的なDNSルックアップを使用していることを確認してください。
  5. 一時的な結果に十分なメモリのSQL負荷を与えます。
6
Phil Ealey