Ist es sicherer, eine dritte Datenbank zu durchlaufen, um zwei Datenbanken mit demselben Login zu verbinden?


18

Wir haben das folgende Setup:

  • Mehrere Produktionsdatenbanken mit privaten Daten, die von Desktop-Software verwendet werden
  • Eine Webdatenbank für eine öffentliche Website, die einige Daten aus den privaten Datenbanken benötigt
  • Eine Zwischendatenbank, die einige Ansichten und gespeicherte Prozeduren enthält, mit denen Daten aus den privaten Datenbanken abgerufen werden

Derzeit meldet sich die Website bei der Webdatenbank an, und die Webdatenbank stellt eine Verbindung zur Zwischendatenbank her, um Daten abzurufen oder gespeicherte Prozeduren in den Produktionsdatenbanken auszuführen. Alle Datenbanken befinden sich in derselben SQL-Instanz, und der gesamte Prozess verwendet dasselbe Benutzerkonto.

Das Benutzerkonto hat uneingeschränkten Zugriff auf die Webdatenbank und die Zwischendatenbank, kann jedoch nur auf bestimmte Ansichten und gespeicherte Prozeduren einer privaten Datenbank zugreifen

Ist dies wirklich sicherer, als die öffentliche Datenbank direkt mit der privaten Datenbank zu verbinden?

Es sieht so aus, als ob die Zwischendatenbank nur dazu da ist, die Dinge zu komplizieren, da dieselbe Anmeldung für den Zugriff auf Daten in allen Datenbanken verwendet wird und sie bereits auf die Ansichten / SPs beschränkt ist, die in den privaten Datenbanken benötigt werden. Ich hoffe es zu entfernen.


2
Sie haben einen Vermittler; diese procs / views auf der Web-DB. Solange Ihre Berechtigungen korrekt eingestellt sind, erscheint die zusätzliche Datenbank als unnötige Abstraktion ohne Sicherheitsauswirkungen.
Ben Brocka

@BenBrocka Das habe ich mir gedacht, aber ich wollte es noch einmal überprüfen, bevor ich es komplett entfernt habe
Rachel

Antworten:


7

Eines springt hier raus:

Der gesamte Prozess verwendet dieselben Anmeldeinformationen

Problem

So kann hypothetischer Benutzer X (ob ein Meatsack mit Excel oder IIS AppPool Identity) einige Ansichten und Code sehen. Es spielt keine Rolle, in welcher Datenbank sich diese Ansichten und der Code befinden, da userX sowieso in 3 Datenbanken eingerichtet ist.

Auf diese Weise verlieren Sie jedoch die Eigentumsverkettung.

Sagen wir WebDB.dbo.SomeProcAnrufe PrivateDB.dbo.SomeTable. UserX benötigt Berechtigungen für beide Objekte. Wenn dies verwendet wurde, OneDB.WebGUI.SomeProcwerden OneDB.dbo.SomeTablenur die OneDB.WebGUI.SomeProcerforderlichen Berechtigungen benötigt. Berechtigungen für referenzierte Objekte mit demselben Eigentümer werden nicht überprüft.

Hinweis: Ich habe die datenbankübergreifende Eigentumsverkettung nicht zu genau untersucht . Ich kenne nur ganz alte "Eigentumsverkettungen" gut

Nun haben Sie laut Kommentaren wirklich 2 Datenbanken, die kombiniert werden können. Nicht 3, was ursprünglich impliziert wurde. Zwischenprodukt und Bahn können jedoch kombiniert werden.

Die anderen "privaten" Datenbanken können möglicherweise kombiniert werden, aber das ist ein separates Problem. Unter dem unteren Link finden Sie eine ausführlichere Beschreibung von "einer Datenbank oder mehreren".

Lösung?

Wenn die zusätzlichen Datenbanken nur Codecontainer sind, sind Schemas eine bessere Idee.

Das hört sich so an, als hätten Sie "Database" verwendet, wo Sie "Schema" verwenden sollten (im Sinne von SQL Server, nicht im Sinne von MySQL). Ich hätte ein WebGUI-Schema, ein Hilfs- oder allgemeines Schema (um die Zwischendatenbank zu ersetzen) und ein Desktop-Schema. Auf diese Weise trennen Sie Berechtigungen basierend auf Clients und haben nur eine Datenbank

Mit einer Datenbank (zusätzlich zu "Eigentumsverkettung") können Sie auch indizierte Ansichten, SCHEMABINDING (ich verwende es immer) und solche berücksichtigen, die mit separaten Datenbanken nicht möglich sind

Weitere Informationen zu Schemata finden Sie in den folgenden Fragen:

Schließlich scheint es keinen Grund zu geben, separate Datenbanken basierend auf "Transaktionsintegrität nicht erforderlich" zu haben. Erklären Sie dies anhand der folgenden Frage: Entscheidungskriterien für die Verwendung eines Nicht-DBO-Schemas gegenüber einer neuen Datenbank


Vielen Dank. Es gibt ein paar Gründe, warum sich die Webdaten in einer separaten Datenbank befinden, aber der größte Grund war, dass es tatsächlich mehrere private Datenbanken gibt, und die Webdatenbank ist dafür verantwortlich, auf die richtige private Datenbank zuzugreifen, um Daten abzurufen. Mein Hauptanliegen war es herauszufinden, ob die zwischengeschaltete Datenbank tatsächlich etwas zur Sicherheit der Website beiträgt, da ich sie entfernen möchte. Bisher klingt es so, als würde nichts anderes hinzugefügt als eine zusätzliche Komplexitätsebene.
Rachel

@Rachel: Das Bit "Mehrere private Datenbanken" ist für jede Antwort ziemlich relevant, insbesondere für diese ... Ich hätte etwas anderes gesagt, wenn dies bekannt gewesen wäre
gbn

@Rachel: warum hast du die "multiple PrivateDB" bei der Frage nicht erwähnt? Das ändert alles ...; - \
Fabricio Araujo

@FabricioAraujo Ich habe meine Frage vor 2 Stunden bearbeitet, um diese Informationen einzuschließen. Ich dachte nicht, dass es etwas ausmachte, als ich nach der Sicherheit der Datenbankanordnung fragte, nicht nach dem Design.
Rachel

1
@FabricioAraujo: Die Anforderungen definieren das Design, daher muss ein Design korrekt sein, bevor es sicher ist. Ein sicheres falsches Design ist wertlos - ein unsicheres korrektes Design kann jederzeit sicher gemacht werden.
Fabricio Araujo

4

Die Antwort lautet: es kommt darauf an. Wenn der Zugriff auf die private Datenbank nicht über ein externes internes LAN (oder nur über ein VPN) erfolgt, erhöht dieses Schema die Sicherheit, da Personen, die die Anmeldeinformationen der Website verwenden, nur eingeschränkten Zugriff auf diesen privaten DB-Server haben (und mehr Arbeit haben werden) in Ihr internes Netzwerk - Zeit, die nützlich sein kann, um das Eindringen zu entdecken und die Lücke zu schließen).

Wenn nicht, fügt es meiner Meinung nach nichts außer Komplexität hinzu.


BEARBEITEN:

Scheint Ich habe Ihre Frage falsch verstanden, so lasst uns sehen , ob ich das jetzt richtig verstanden: die IntermDb ist eine leere Datenbank nur zu PrivateDB zu verbinden ODER es ist ein DB mit Blick / Verfahren seiner eigenen haben , die mit dem PrivateDB verbindet Daten abzurufen ?

Im ersten Fall WTF? Reiß es ab. Es ist wertlos, es sei denn, jemand möchte es überprüfen, um den Profilzugriff auf die PrivateDB auf eine entspannte Art und Weise zu überprüfen (und WebApp-Entwickler dazu zu bringen, härter zu arbeiten). SQL Profiler kann mit DB_ID filtern ...

Im zweiten Fall halte ich meine vorherige Antwort aufrecht.

BEARBEITEN: "Ich sehe immer noch nicht, wie sicherer dies ist, als die private Datenbank direkt mit der öffentlichen Datenbank zu verbinden, da alle 3 Datenbanken auf derselben SQL-Instanz und die für alle 3 Datenbanken verwendete Anmeldung gleich sind und nur darauf zugreifen können spezifische Ansichten und gespeicherte Prozeduren in der privaten Datenbank ".

Die Vermittlungs - Mittel haben , dass Invader würde in Ihrem Code graben , wissen die Existenz eines IntermDB - und haben Ihren Code zu graben darauf , dass existiert ein PrivateDB zu kennen.

Wenn Sie Ihre PrivateDB auf einen anderen internen Server Ihres Unternehmens-LAN / WAN stellen (falls möglich), kann dies dem Administrator ausreichend Zeit geben, um den Versuch einer Invasion zu erkennen und zu blockieren. Wenn Sie Synonyme verwenden, funktioniert dies reibungslos, da Sie sie nur im vorhandenen Code neu erstellen und an die richtige Stelle verschieben müssen.

Darüber hinaus haben Sie weitere Vorteile: Da der gesamte Code IntermDB passieren muss, um auf Daten in PrivateDB zuzugreifen, ist kein Entwickler versucht, ihn zu umgehen. Dieser Versuch kann in SQL Server Profiler problemlos als DB_ID der Anforderung von PrivateDb-Daten erkannt werden wäre WebAppDb.


Wäre die Sicherheit nicht dieselbe, als ob Sie die öffentliche Datenbank auf einem Server und die private auf einem anderen Server hätten? Was bewirkt das Hinzufügen einer dritten Datenbank zu diesem Schema, um die Sicherheit zu erhöhen? Obwohl sich in meiner Situation alle 3 Datenbanken auf derselben SQL Server-Instanz befinden (diese Information wurde auch zu meiner Frage hinzugefügt)
Rachel

Als Reaktion auf Ihre Bearbeitung enthält die mittlere Datenbank eigene Ansichten und gespeicherte Prozeduren, die Daten von der privaten Datenbank zurückgeben. Ich sehe immer noch nicht, wie sicherer dies ist, als die private Datenbank direkt mit der öffentlichen Datenbank zu verbinden, da alle 3 Datenbanken auf derselben SQL-Instanz und die für alle 3 Datenbanken verwendete Anmeldung gleich sind und nur auf bestimmte Ansichten und zugreifen können gespeicherte Prozeduren in der privaten Datenbank sowieso
Rachel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.