Als er Scott Hanselmans Interview mit dem Stack Overflow-Team ( Teil 1 und 2 ) hörte, bestand er darauf, dass sich der SQL-Server und der Anwendungsserver auf getrennten Computern befinden sollten. Damit soll nur sichergestellt werden, dass bei einem kompromittierten Server nicht auf beide Systeme zugegriffen werden kann? Wiegen die Sicherheitsbedenken die Komplexität von zwei Servern auf (zusätzliche Kosten, dedizierte Netzwerkverbindung zwischen den beiden, mehr Wartung usw.), insbesondere für eine kleine Anwendung, bei der keines der beiden Teile zu viel CPU oder Speicher benötigt? Selbst bei zwei Servern, bei denen ein Server kompromittiert ist, kann ein Angreifer ernsthaften Schaden anrichten, indem er entweder die Datenbank löscht oder mit dem Anwendungscode herumspielt.
Warum sollte das so eine große Sache sein, wenn Leistung kein Problem ist?
quelle
Es ist nicht wirklich Materie (Sie ganz glücklich können Sie Ihre Website mit Web / Datenbank auf demselben Rechner laufen), es ist nur der einfachste Schritt in Skalierung ..
Genau das hat StackOverflow getan - angefangen bei einem einzelnen Computer, auf dem IIS / SQL Server ausgeführt wird, und dann, als es stark ausgelastet wurde, wurde ein zweiter Server gekauft und der SQL Server darauf verschoben.
Wenn die Leistung kein Problem darstellt, verschwenden Sie kein Geld mit dem Kauf / der Wartung von zwei Servern.
quelle
Auf der anderen Seite bezogen sie sich auf einen anderen Blogger, Scott (Watermasyck, von Telligent). Sie stellten fest, dass die meisten Benutzer die Websites beschleunigen konnten (mithilfe des Community-Servers von Telligent), indem sie die Datenbank auf demselben Computer wie die Website platzierten. Im Fall ihrer Kunden sind jedoch normalerweise der Datenbank- und Webserver die einzigen Anwendungen auf diesem Computer, und die Website belastet den Computer nicht so sehr. Die Effizienz, keine Daten mehr über das Netzwerk senden zu müssen, machte die erhöhte Belastung wieder wett.
quelle
Ich würde denken, der große Faktor wäre die Leistung. Sowohl der Webserver / App-Code als auch SQL Server würden häufig angeforderte Daten im Speicher zwischenspeichern, und Sie beeinträchtigen Ihre Cache-Leistung, indem Sie sie im selben Speicherbereich ausführen.
quelle
Tom hat damit Recht. Einige andere Gründe sind, dass es nicht kosteneffektiv ist und dass zusätzliche Sicherheitsrisiken bestehen.
Webserver haben andere Hardwareanforderungen als Datenbankserver. Datenbankserver schneiden mit viel Speicher und einem sehr schnellen Festplattenarray besser ab, während Webserver nur genügend Speicher zum Zwischenspeichern von Dateien und häufigen DB-Anforderungen benötigen (abhängig von Ihrem Setup). In Bezug auf die Kosteneffizienz sind die beiden Server nicht unbedingt günstiger. Das Verhältnis von Leistung zu Kosten sollte jedoch höher sein, da Sie nicht unterschiedliche Anwendungen benötigen, die um Ressourcen konkurrieren. Aus diesem Grund müssen Sie wahrscheinlich viel mehr für einen Server ausgeben, der beiden Anforderungen gerecht wird und die Leistung von zwei spezialisierten Servern bietet.
Die Sicherheitsbedenken bestehen darin, dass sowohl der Webserver als auch die Datenbank anfällig sind, wenn der einzelne Computer kompromittiert wird. Mit zwei Servern haben Sie etwas Luft zum Atmen, da der zweite Server (zumindest für eine Weile) noch sicher ist.
Es gibt auch einige Skalierbarkeitsvorteile, da Sie möglicherweise nur einige Datenbankserver warten müssen, die von einer Reihe verschiedener Webanwendungen verwendet werden. Auf diese Weise haben Sie weniger Arbeit, um Upgrades oder Patches anzuwenden und die Leistung zu optimieren. Ich glaube, dass es Server-Management-Tools gibt, die diese Aufgaben vereinfachen (im Fall eines einzelnen Computers).
quelle
Sicherheit ist ein wichtiges Anliegen. Idealerweise sollte sich Ihr Datenbankserver hinter einer Firewall befinden und nur die für den Datenzugriff erforderlichen Ports geöffnet sein. Ihre Webanwendung sollte eine Verbindung zum Datenbankserver mit einem SQL-Konto herstellen, das gerade über genügend Rechte verfügt, damit die Anwendung funktioniert, und nicht mehr. Zum Beispiel sollten Sie Rechte entfernen, die das Löschen von Objekten ermöglichen, und Sie sollten mit Sicherheit keine Verbindung mit Konten wie 'sa' herstellen.
Für den Fall, dass Sie den Webserver durch einen Hijack verlieren (dh eine vollständige Eskalation von Berechtigungen zu Administratorrechten), besteht das schlimmste Szenario darin, dass die Datenbank Ihrer Anwendung möglicherweise gefährdet ist, jedoch nicht der gesamte Datenbankserver (wie dies der Fall wäre, wenn der Datenbankserver und Webserver waren dieselbe Maschine). Wenn Sie Ihre Datenbankverbindungszeichenfolgen verschlüsselt haben und der Hacker nicht geschickt genug ist, um sie zu entschlüsseln, haben Sie nur den Webserver verloren.
quelle
Ein Faktor, der noch nicht erwähnt wurde, ist der Lastausgleich. Wenn Sie zunächst den Webserver und die Datenbank als separate Computer betrachten, optimieren Sie für weniger Netzwerk-Roundtrips und es wird auch einfacher, einen zweiten Webserver oder eine zweite Datenbank-Engine hinzuzufügen, wenn die Anforderungen steigen.
quelle
Ich kann aus eigener Erfahrung sagen, dass es oft eine gute Idee ist, den Webserver und die Datenbank auf verschiedenen Computern zu platzieren. Wenn Sie eine ressourcenintensive Anwendung haben, kann dies leicht dazu führen, dass die CPU-Zyklen auf dem Computer einen Spitzenwert erreichen und den Computer im Wesentlichen zum Stillstand bringen. Wenn Ihre Anwendung die Datenbank jedoch nur eingeschränkt nutzt, ist es wahrscheinlich keine große Sache, wenn sie einen Server gemeinsam nutzen.
quelle
Wow, niemand spricht die Tatsache an, dass Sie SQL Server, wenn Sie es tatsächlich für 5.000 Dollar kaufen, möglicherweise für mehr als Ihre Webanwendung verwenden möchten. Wenn Sie Express verwenden, ist es Ihnen vielleicht egal. Ich sehe, dass SQL Server Datenbanken für 20 bis 30 Anwendungen ausführen, daher wäre es nicht klug, sie auf den Webserver zu stellen.
Zweitens hängt davon ab, für wen der Server ist. Ich arbeite für Finanzunternehmen und die Regierung. Wir verwenden also einen verrückten Schmerz im Arsch-Ansatz, nur Sprocs zu verwenden und Ports vom Webserver auf SQL zu beschränken. Also, wenn die Web-App gehackt wird. Der Hacker kann nur Sprocs aufrufen, da das Benutzerkonto auf dem Webserver gesperrt ist, um nur Sprocs in der Datenbank anzuzeigen / aufzurufen. Jetzt muss der Hacker herausfinden, wie er in die DB kommt. Wenn es auf dem Webserver gut ist, ist es leicht zu erreichen.
quelle
Ich stimme Daniel Earwicker zu - die Sicherheitsfrage ist ziemlich fehlerhaft.
Wenn Sie ein Single-Box-Setup mit einem Webserver und nur der Datenbank für diesen Webserver haben, verlieren Sie sowohl den Webserver als auch nur die Datenbank für diese bestimmte Anwendung, wenn dieser Webserver kompromittiert ist.
Dies ist genau das Gleiche wie wenn Sie den Webserver bei einem 2-Server-Setup verlieren. Sie verlieren den Webserver und nur die Datenbank für diese bestimmte Anwendung.
Das Argument, dass bei einem Setup mit zwei Servern der Rest der Integrität des DB-Servers erhalten bleibt, ist irrelevant, da im ersten Szenario auch jeder andere Datenbankserver, der sich auf jede andere Anwendung bezieht (falls vorhanden), nicht betroffen ist - so wie sie sind, woanders gehostet werden.
Ähnlich wie bei der Frage von Kev: Was ist mit all den anderen Datenbanken, die sich auf dem DB-Server befinden? Sie haben nur eine Datenbank verloren. '
Im Gegensatz dazu könnten in einem 2-Server-Setup, in dem der Angreifer Zugriff auf den Webserver hatte und durch Proxy eingeschränkte Rechte (im besten Fall) auf den Datenbankserver, die Datenbanken jeder anderen Anwendung durch das Tragen gefährdet werden langsame, speicherintensive Abfragen oder Maximierung des verfügbaren Speicherplatzes auf dem Datenbankserver. Indem Sie die Anwendungen ähnlich wie bei der Virtualisierung in ihre eigenen Belange aufteilen, isolieren Sie sie auch aus Sicherheitsgründen auf positive Weise.
quelle
Dies hängt von der Anwendung und dem Zweck ab. Wenn Hochverfügbarkeit und Leistung nicht kritisch sind, ist es nicht schlecht, die Datenbank und den Webserver nicht zu trennen. Insbesondere unter Berücksichtigung der Leistungssteigerungen: Wenn die Anwendung eine große Anzahl von Datenbankabfragen durchführt, kann eine beträchtliche Menge an Netzwerklast entfernt werden, indem alles auf demselben System gespeichert wird, wodurch die Antwortzeiten niedrig gehalten werden.
quelle
Ich denke, das liegt daran, dass die beiden Maschinen normalerweise auf unterschiedliche Weise optimiert werden müssten. Abgesehen davon habe ich keine Ahnung, dass wir alle unsere Anwendungen mit der Serverdatenbank auf demselben Computer ausführen - vorausgesetzt, wir sind nicht öffentlich zugänglich -, aber wir hatten keine Probleme.
Ich kann mir nicht vorstellen, dass sich zu viele Menschen darum kümmern, dass ein Computer über beide kompromittiert wird, da die Webanwendung normalerweise fast uneingeschränkten Zugriff auf zumindest die Daten hat, wenn nicht auf das Schema in der Datenbank.
Interessiert an dem, was andere sagen könnten.
quelle
Ich habe mir diesen Podcast angehört und es war amüsant, aber das Sicherheitsargument ergab für mich keinen Sinn. Wenn Sie Server A kompromittiert haben und dieser Server auf Daten auf Server B zugreifen kann, haben Sie sofort Zugriff auf die Daten auf Server B.
quelle
Datenbanklizenzen sind nicht billig und werden häufig pro CPU berechnet. Durch die Trennung Ihrer Webserver können Sie daher die Kosten für Ihre Datenbanklizenzen senken.
Wenn Sie beispielsweise einen Server haben, der sowohl das Web als auch die Datenbank mit 8 CPUs ausführt, müssen Sie für eine 8-CPU-Lizenz bezahlen. Wenn Sie jedoch zwei Server mit jeweils 4 CPUs haben und die Datenbank auf einem Server ausführen, müssen Sie nur für 4 CPU-Lizenzen bezahlen
quelle
Ein weiteres Problem ist, dass Datenbanken gerne den gesamten verfügbaren Speicher belegen und ihn für die Zeit reservieren, in der er verwendet werden soll. Sie können die Speicherbeschränkung erzwingen, dies kann jedoch den Datenzugriff erheblich verlangsamen.
quelle
Das Argument, dass durch das Ausführen eines Datenbankservers auf einem Webserver ein echter Leistungsgewinn erzielt werden kann, ist ein fehlerhaftes Argument.
Da Datenbankserver Abfragezeichenfolgen verwenden und Ergebnismengen zurückgeben, sind die tatsächlich vom Datenserver zum Webserver fließenden Daten relativ gering, aber die zum Verarbeiten der Abfrage und Generieren der Ergebnismenge erforderliche Leistung ist relativ groß. Die Optimierung der Leistung um die Datenübertragungszeit herum ist daher eine Optimierung um das Falsche.
In Bezug auf die Sicherheit bietet es Vorteile, wenn sich der Datenserver auf einer anderen Box als der Webserver befindet. Ein solches Setup ist nicht das A und O der Sicherheit, aber es ist ein Schritt in die richtige Richtung.
In Bezug auf die Skalierbarkeit ist es einfach und relativ kostengünstig, Webserver hinzuzufügen und in Cluster zu packen, um den erhöhten Datenverkehr zu bewältigen. Es ist nicht so einfach und billig, Datenserver hinzuzufügen und zu gruppieren. Außerdem haben Webserver und Datenserver unterschiedliche Hardwareanforderungen, sodass mehrere Boxen die Skalierbarkeit verbessern.
Wenn Sie klein anfangen und nur eine Box haben, ist es ein guter Weg, virtuelle Maschinen zu verwenden. Wenn Sie den Webserver und den Datenserver auf verschiedenen VMs auf einem Host ausführen, erhalten Sie alle Vorteile separater Boxen zum Preis eines großen Boxpreises.
quelle
Das Betriebssystem ist eine weitere Überlegung. Während Ihre Datenbank möglicherweise größere Speicherplätze und damit UNIX benötigt, ist Ihr Webserver - oder genauer gesagt Ihr App-Server, da Sie nur zwei Ebenen erwähnen - möglicherweise .NET-basiert und erfordert daher Windows.
quelle
OK! Hier ist die Sache, es ist sicherer, Ihren DB Server auf einem anderen Computer und Ihre Anwendung auf dem Webserver zu installieren. Anschließend verbinden Sie Ihre Anwendung über einen Weblink mit der Datenbank. Danke.
quelle