データベースとWebサーバーを同じマシン上に配置することが望ましくないのはなぜですか?


126

Scott OverselmanのStack Overflowチームへのインタビュー(パート1および2)を聞いた彼は、SQLサーバーとアプリケーションサーバーは別々のマシン上にあるべきだと断言しました。これは、一方のサーバーが危険にさらされた場合に両方のシステムにアクセスできないことを確認するためだけのものですか?2つのサーバーの複雑さ(追加コスト、2つのサーバー間の専用ネットワーク接続、より多くのメンテナンスなど)をセキュリティの懸念が上回っていますか?2台のサーバーがあり、1台のサーバーが危険にさらされていても、攻撃者はデータベースを削除したり、アプリケーションコードをいじったりして、深刻な被害を与える可能性があります。

パフォーマンスが問題ではないのに、なぜこれがそれほど大きな問題になるのでしょうか。

回答:


158
  1. セキュリティ。WebサーバーはDMZにあり、パブリックインターネットにアクセスでき、匿名ユーザーからの信頼できない入力を受け取ります。Webサーバーが危険にさらされ、DBへ​​の接続で最小限の特権ルールに従っている場合、最大の露出は、アプリがデータベースAPIを通じて実行できることです。間にビジネス層がある場合、攻撃者とデータの間にもう1つのステップがあります。一方、データベースが同じサーバー上にある場合、攻撃者はデータとサーバーへのrootアクセス権を持っています。
  2. スケーラビリティ。Webサーバーをステートレスに保つことで、Webサーバーを水平にほぼ簡単にスケーリングできます。データベースサーバーを水平方向に拡張することは非常に困難です。
  3. パフォーマンス。2ボックス= CPUの2倍、RAMの2倍、ディスクアクセス用のスピンドルの2倍。

そうは言っても、私は確かにそれらの点のどれも本当に重要ではない合理的なケースを見ることができます。


27
しかし、2台のマシンでは、ハードウェア障害の可能性が2倍になります;)
TWith2Sugars '19年

4
@ TWith2Sugars-何とは対照的ですか?
Kev

3
参照 ポイント1. Web層が所有されている場合、App / database APIインターフェイス以外に何が必要または必要ですか。とにかくその時点でゲームオーバーなのでしょうか?次に、DMZインフラストラクチャをサポートするために必要なサービスの面で非常に興味深いものになります。
Noelie Dunne、

4
@Noelie-Web層は、たとえばデータベースをファイルにバックアップし、そのファイルをxp_cmdshellを使用してftp.hackers.comにftpするなどのアクセス権を持ちません。または、データベースを削除します。または設定値を変更します。その他
マークブラケット

6
@kirgy-2つのマシンは並列であり、それぞれが単一障害点であるため、全体的な信頼性は低くなります。厳密には2倍ではありませんが(実際には1-(r1 * r2)です)、信頼性が高く、ノードが小さい場合は十分に近くなります。0.01%の場合、0.0199%になります。ただし、100ノードの場合は、倍増ステートメントで示される100%ではなく、36.6%になります。
Mark Brackett 2016

45

これは実際には問題ではありませ(同じマシンでWeb /データベースを使用してサイトを実行することもできます)。これはスケーリングの最も簡単なステップにすぎません。

それはまさにStackOverflowが行ったことです。IIS/ SQL Serverを実行する単一のマシンから始めて、負荷が高くなり始めたときに、2台目のサーバーを購入し、SQLサーバーをそのサーバーに移動しました。

パフォーマンスに問題がない場合は、2台のサーバーを購入/維持するためにお金を無駄にしないでください。


3
私は同意します、それは負荷が低い間に行うことができます...負荷が増加するにつれて、それらを2つ以上のマシンに分離するのは簡単です。
EJブレナン

4
私が来て、同じことについてコメントするつもりでした。DBサーバーの切り替えは、接続文字列を変更するのと同じくらい簡単です(ほとんどの場合)。
CitizenBane 2009年

ええと、私はそれが好きです。誰かが解決策を提案する前にコンテキストを考えています!
demisx

22

一方、別のブログのスコット(TelligentのWatermasyck)を参照すると、ほとんどのユーザーがデータベースをWebサイトと同じマシンに配置することで、(Telligentのコミュニティサーバーを使用して)Webサイトを高速化できることがわかりました。ただし、顧客のケースでは、通常、db&webサーバーがそのマシン上の唯一のアプリケーションであり、Webサイトはマシンにそれほど負担をかけていません。次に、ネットワークを介してデータを送信する必要がないという効率により、負担の増大を補うことができます。


4
...同時使用が増加するまで、dbサーバーはバッファとキャッシュを効果的に使用するためにより多くのメモリを必要とします。web / appおよびdbサーバーが単一のボックスで共有できるよりも多くのメモリを必要とすると、ページングとディスクI / Oが増加し、パフォーマンスタンクが増加します。
カーマット2009年

@MattK-しかし、大量のメモリがある場合はどうなりますか?各クライアントが独自のデータベースを持っているアプリがあるので、データベースとWebサーバーの両方が非常に簡単に水平に拡張できます。使用中のディスクよりも多くのメモリ(64GB対〜40GB)があることを考えると、パフォーマンスを向上させ、すべてを同じマシン上に保持するほうがよいのではないでしょうか。
ビープビープ音

1
ワーキングセットがメモリに収まる場合は、私が言及しているパフォーマンスの問題がまったく表示されない可能性があります。多くの場合、サーバーはRAMより多くのディスクを備えていますが、共有サーバー上のアプリケーションが過度にRAMを消費しない限り、RAMに完全に収まるデータベースがあるように思えます。
カーマット、

15

大きな要因はパフォーマンスだと思います。Webサーバー/アプリケーションコードとSQ​​L Serverの両方が、一般的に要求されたデータをメモリにキャッシュし、同じメモリ空間でそれらを実行することでキャッシュのパフォーマンスを低下させます。


12
小さな(がっしりした)データベースがあり、大量のメモリがある場合はどうなりますか?データベースの呼び出しごとにネットワークを経由するコストは、特に多くある場合、メリットを上回りますか?
ビープビープ音

1
@Tom Ritterパフォーマンスは懸念事項ですが(この回答によると、Mark Brackettの回答のポイント3)、別のDBサーバーをより多くのCPU / RAM /等 それを置き換えた唯一のサーバーで。したがって、これを考慮する必要があります。分離されたメモリについては、IISとSQLを構成して、リソースをめぐる競合を明らかにすることができます。個人的には、私にとっての「キッカー」は、マークの1番めのポイントでした...セキュリティ。私は、侵害されたWebサーバーが別の DBサーバーにアクセスしなければならない制限されたアクセスの考え方が好きです。
ディラン-INNOソフトウェア

@トム、あなたは常にメモリ空間を2つの別々のユニットに分割することができます。サーバー用の半分とデータベース用の半分。
Pacerier 2014年

15

トムはこれについて正しい。他のいくつかの理由は、費用効果が高くないこと、および追加のセキュリティリスクがあることです。

Webサーバーには、データベースサーバーとは異なるハードウェア要件があります。データベースサーバーは、大量のメモリと非常に高速なディスクアレイを使用するとより適切に動作しますが、Webサーバーは、ファイルと頻繁なDB要求(設定によって異なります)をキャッシュするのに十分なメモリしか必要としません。費用対効果に関しては、2台のサーバーが必ずしも安価になるわけではありませんが、リソースを競合する異なるアプリケーションを使用する必要がないため、パフォーマンス/コストの比率は高くなるはずです。このため、1つのサーバーで両方に対応し、2つの専用サーバーと同等のパフォーマンスを提供するために、より多くの費用を費やす必要があります。

セキュリティ上の懸念は、単一のマシンが侵害された場合、Webサーバーとデータベースの両方が脆弱になることです。2台のサーバーでは、2台目のサーバーは(少なくともしばらくの間)安全であるため、ある程度の余裕があります。

また、多数の異なるWebアプリケーションで使用される少数のデータベースサーバーを維持するだけでよいため、スケーラビリティの利点がいくつかあります。この方法では、アップグレードやパッチの適用やパフォーマンスチューニングを行うための作業が少なくなります。私はこれらのタスクを簡単にするためのサーバー管理ツールがあると信じています(単一のマシンの場合)。


2
SP以外を実行している場合、おそらくWebサーバーはおそらくデータベース内のデータにフルアクセスできます
George Mauer

なぜ費用対効果が高くないのですか?ご指定ください。
Robert Jeppesen

Robert Iはこれを拡張し、スケーラビリティとメンテナンスに関するコメントを追加しました。
Dana the Sane

9

セキュリティは大きな関心事です。理想的には、データベースサーバーはファイアウォールの背後にあり、データアクセスの実行に必要なポートのみが開かれている必要があります。Webアプリケーションは、アプリケーションが機能するために十分な権限を持ち、それ以上は機能しないSQLアカウントでデータベースサーバーに接続している必要があります。たとえば、オブジェクトの削除を許可する権限を削除する必要があります。また、「sa」などのアカウントを使用して接続することはできません。

Webサーバーをハイジャックで失った場合(つまり、管理者権限への完全な特権昇格)、最悪のシナリオは、アプリケーションのデータベースが危険にさらされる可能性がありますが、データベースサーバー全体ではない場合です(データベースサーバーとWebサーバーは同じマシンです)。データベース接続文字列を暗号化していて、ハッカーがそれらを解読するのに十分に精通していない場合、失ったのはWebサーバーだけです。


しかし、データベースをバックアップしますよね?それ以外の場合は、ハードウェア障害やめったに興奮しないバグのために、それを失うリスクと同じくらいあります。Webサーバーを強制終了する攻撃は、それ自体でダウンタイムを引き起こします。レコードをテーブルに追加するための十分な権限があれば、サイトを無用にすることができます。
Daniel Earwicker 2009年

もちろん、あなたはデータベースをバックアップしますが、それは暗黙のうちです。
ケブ

1
はい。しかし、結論は、サイトをダウンさせることを目的とした攻撃は、Webサーバーの構成またはデータベースを破壊することで可能であり、ソリューションはバックアップから復元するという両方で同じであるということです。データベースを特別に保護することは、(a)不要であり、(b)とにかく不可能です。
Daniel Earwicker 2009年

@Earwicker-DBサーバーにある他のすべてのデータベースはどうですか?失われたのは1つのデータベースだけです。
ケブ

8
ダニエルの他に、あなたは大きなポイントを逃しています。それはデータベースのバックアップではなく、侵害されたデータに関するものです。あなたの顧客は「ハッカーがすべての顧客と販売データを盗んだが、心配しないで、私はバックアップを持っている」と大丈夫でしょうか?:)
Dylan-INNO Software、

9

まだ言及されていない要因の1つは、負荷分散です。Webサーバーとデータベースを別々のマシンとして考えることから始めると、ネットワークの往復回数を減らすように最適化し、必要に応じて2番目のWebサーバーまたは2番目のデータベースエンジンを追加するのも簡単になります。


6

直接の経験から、Webサーバーとデータベースを別のマシンに配置することはしばしば良い考えであると言えます。リソースを集中的に使用するアプリケーションを使用している場合は、マシンのCPUサイクルがピークに達し、本質的にマシンが停止する可能性があります。ただし、アプリケーションでのデータベースの使用が制限されている場合は、サーバーでサーバーを共有してもそれほど大きな問題にはなりません。


6

うわー、SQLサーバーを実際に5,000ドルで購入した場合、それをWebアプリケーション以外にも使用したいと思う人はいないでしょう。エクスプレスを使用している場合は、気にしないでください。SQLサーバーは20〜30のアプリケーションでデータベースを実行するので、それをWebサーバーに配置するのは賢明ではありません。

第二に、サーバーの対象者によって異なります。私は金融会社と政府のために働いています。したがって、sprocのみを使用し、WebサーバーからSQLへのポートを制限するというassアプローチには、非常に苦労します。つまり、ウェブアプリがハッキングされた場合。ハッカーができる唯一のことは、Webサーバー上のユーザーアカウントがDB上のsprocのみを表示/呼び出すようにロックされているため、sprocを呼び出すことです。したがって、ハッカーはDBに侵入する方法を理解する必要があります。Webサーバー上であれば、簡単にアクセスできます。


5

私はダニエル・イアウィッカーに同意します-セキュリティの問題にはかなり欠陥があります。

WebサーバーとそのWebサーバーのデータベースのみが含まれるシングルボックスセットアップを使用している場合、そのWebサーバーが危険にさらされると、その特定のアプリケーションのWebサーバーとデータベースのみの両方が失われます。

これは、2サーバー構成でWebサーバーを紛失した場合とまったく同じです。Webサーバーは失われ、その特定のアプリケーションのデータベースだけが失われます。

最初のシナリオでは、他のすべてのアプリケーション(存在する場合)に関連する他のすべてのデータベースサーバーも影響を受けないため、2サーバー構成の場合、「残りのDBサーバーの整合性は維持される」という議論は関係ありません。 -現状のまま、別の場所でホストされている。

同様に、Kevが提起した質問に対して、「DBサーバーにある他のすべてのデータベースについてはどうですか?失われたのは1つのデータベースだけです。」

  • 1つのサーバーでアプリケーションとデータベースをホストしている場合は、そのアプリケーションに関連するデータベースのみをそのサーバーでホストします。したがって、複数サーバーのセットアップと比較して、単一サーバーのセットアップで追加のデータベースが失われることはありません。

対照的に、攻撃者がWebサーバーへのアクセス権を持ち、データベースサーバーへのプロキシ(限られた場合)で制限された権限を持つ2サーバー構成では、他のすべてのアプリケーションのデータベースを危険にさらす可能性があります。低速でメモリを大量に消費するクエリを除外するか、データベースサーバーで利用可能なストレージ領域を最大化します。アプリケーションを仮想化と非常によく似た独自の関心事に分離することで、セキュリティの目的でアプリケーションを確実に分離します。


4

用途や目的により異なります。高可用性とパフォーマンスが重要でない場合、DBとWebサーバーを分離しないことは悪くありません。特にパフォーマンスの向上を考慮してください。アプリケーションが大量のデータベースクエリを実行する場合、すべてを同じシステム上に維持し、応答時間を低く抑えることで、かなりの量のネットワーク負荷を取り除くことができます。


2

2つのマシンは通常、異なる方法で最適化する必要があるためです。それ以外は私にはわかりませんが、サーバーデータベースを使用してすべてのアプリケーションを同じマシン上で実行します-公に向いているわけではありませんが-問題はありませんでした。

Webアプリケーションは通常、データベース内のスキーマでなければ、少なくともデータにほぼ無制限にアクセスできるため、1台のマシンが両方で危険にさらされていることにあまり多くの人々が気にかけているとは思えません。

他の人が言うかもしれないことに興味があります。


1
ジョージ、マーク・ブラケットの答えを参考にすべきだと思う。Webサーバーのデータベースに対するセキュリティは、サーバーが独立している場合と同じではありません。特に「ローカルディスク」にはアクセスできません。さらに、(多くの)1つのWebサイトのみがハッキングされた場合、そのサイトのデータベースへのアクセスが侵害される可能性があります(その接続文字列に対して強力なユーザーを使用しない限り)。他にも数え切れないほどのシナリオがありますが、ここでのコメントはその場とは思えません。
ディラン-INNOソフトウェア

2

私はそのポッドキャストを聞いていて、それは面白かったが、セキュリティの議論は私には意味がなかった。サーバーAのセキュリティを侵害し、そのサーバーがサーバーBのデータにアクセスできる場合は、サーバーBのデータにすぐにアクセスできます。


違います。Box AがBox Bに対して持っていたすべてのデータまたは権限にアクセスできます。安全なセットアップでは、Box A上のアプリが持つ最高レベルのDBアクセスを持っていることになります。あなたは、しかし、ボックスBのOS上のSA DB上のPRIVS、またはルートを持っていない
マーク・ブラケット・

2
「ボックスAがボックスBに対して持っていたすべてのデータまたは特権にアクセスできます」-「サーバーB上のデータに即座にアクセスできます」とは、これを意味します。RDBMSがボックスAにあり、ボックスBがない場合、どのような違いがありますか?NB。私たちはあなたがすでにどちらかの方法でボックスAをハッキングしたと想定しています。
Daniel Earwicker 2009年

2ボックス構成で、最小特権の原則を適用している場合、ボックスA(Web)が危険にさらされていると、ボックスBのDBが失われ、それ以上は起こりません。
ケブ

1
そして、1つのボックスの構成では、その1つのボックスが危険にさらされると、その1つのボックス(DBを含む)が失われます。違いは何ですか?
Daniel Earwicker 2009年

2
違いは、2ボックス構成では、Webサーバーが危険にさらされた場合、Webサーバーと最悪の場合はDBだけを失うことです。DBサーバーの残りの整合性は維持されます。
ケヴ

2

データベースライセンスは安価で、CPUごとに課金されることが多いため、Webサーバーを分離することで、データベースライセンスのコストを削減できます。

たとえば、1つのサーバーで8つのCPUを含むWebとデータベースの両方を実行している場合、8 CPUのライセンスに対して支払う必要があります。ただし、それぞれ4 CPUを搭載した2台のサーバーがあり、1台のサーバーでデータベースを実行している場合は、4 CPUライセンスのみを支払う必要があります。


これがどのように節約になるか説明してください。
John Saunders、

1
ジョン-彼は、2台のマシンと同等のパフォーマンスを得るには、コアの数を2倍にする必要があると言っています。これにより、SQL Serverのライセンスコストが2倍になります。2台のマシンを使用するのと同じパフォーマンスしか得られない場合に、SQL Serverに追加で$ 10〜20kを支払う理由。
ビープビープ音

パフォーマンス/リソース使用率(CPUなど)がアプリケーションサーバーによって支配され、データベースサーバーによって支配されない場合にのみ当てはまります。dbに8 cpusが必要な場合は機能しません。
Andreas Dietrich

1

追加の懸念は、データベースが使用可能なすべてのメモリを取得し、それを使用したいときに備えて確保しておくことです。強制的にメモリを制限できますが、これによりデータアクセスが大幅に遅くなる可能性があります。


-1

Webサーバー上でデータベースサーバーを実行することにより、実際のパフォーマンスが向上すると主張するのは誤りです。

データベースサーバーはクエリ文字列を取り、結果セットを返すため、データサーバーからWebサーバーに実際に流れるデータは比較的小さくなりますが、クエリを処理して結果セットを生成するために必要な処理能力は比較的大きくなります。したがって、データ転送時間に関するパフォーマンスを最適化することは、間違っていることに関して最適化することです。

セキュリティに関しては、データサーバーをWebサーバーとは別のボックスに配置することには利点があります。このような設定を行うことは、セキュリティのすべてで終わりというわけではありませんが、正しい方向への一歩です。

スケーラビリティに関しては、Webサーバーを追加してクラスターに配置し、増加したトラフィックを処理することは簡単で比較的安価です。データサーバーを追加してクラスター化するのは、それほど簡単で安くはありません。また、Webサーバーとデータサーバーではハードウェアのニーズが異なるため、複数のボックスがスケーラビリティに役立ちます。

小規模から始めて、ボックスが1つしかない場合は、仮想マシンを使用することをお勧めします。1台のホストの異なるVMでWebサーバーとデータサーバーを実行すると、1つの大きなボックスの価格で個別のボックスをすべて利用できます。


1
元の質問では、アプリケーションサーバーについて尋ねましたが、必ずしもインターネットに面しているWebサーバーではありません。
ジョアン・ブラガンサ

-2

オペレーティングシステムは別の考慮事項です。データベースにはより大きなメモリ領域、つまりUNIXが必要な場合がありますが、Webサーバー(より具体的には2つの層についてのみ言及しているためアプリサーバー)は.Netベースであり、したがってWindowsが必要になる場合があります。


私はこれに反対票を投じませんでしたが、「データベースがより大きなメモリ領域を必要とする可能性があるため、UNIXである可能性があります」
Kev

申し訳ありませんが、メモリは、分割されたOSに展開する必要がある理由の1つとして意図されていました。その他の理由には、パフォーマンス、セキュリティ、企業標準/ライセンス、ベンダーサポートなどが含まれます
Chris Noe

-6

OK!DBサーバーを別のマシンにインストールし、アプリケーションをWebサーバーにインストールする方が安全です。次に、Webリンクを使用してアプリケーションをDBに接続します。ありがとう。


3
なぜより安全なのですか?
ブライアンチェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.