Ich habe einen Lehrer, der mir sagte, dass eine Datenbank mit einer Tabelle, auf die etwa 60% der anderen Tabellen verweisen, ein Sicherheits-Nein-Nein ist. Das Problem ist, dass er nicht erklären konnte, warum es ein Sicherheitsrisiko war.
security
foreign-key
database-agnostic
Cordelia_Chase
quelle
quelle
Antworten:
Ich glaube, dass ein gewisses Risiko darin besteht, dass mit REFERENCES Daten gelesen werden können, die jemand eigentlich nicht lesen sollte, wenn Sie die Berechtigung REFERENCES für ein Objekt übersehen, wenn Sie einem Konto den direkten Zugriff auf das Objekt verweigern Lesen - zumindest aus der angegebenen Schlüsselspalte. Die Schlüsselspalte kann eine Bankkontonummer oder eine SSN sein. Zumindest können Sie es ausnutzen, um herauszufinden, ob der Datenwert ABCDEF in der Tabelle enthalten ist oder nicht. In der Dokumentation von Oracle heißt es "Berechtigungen konservativ gewähren", was bedeutet, dass sie überhaupt nicht gewährt werden, im Idealfall explizit verweigert werden. Halten Sie sie insbesondere von einem "öffentlichen" oder "Gast" -Konto fern, für das keine spezielle Berechtigung für Ihre Datenbank erforderlich ist.
Auf einem Server mit hohem Standard (ich verwende Microsoft SQL Server) kann dies gemindert werden, wenn auf Tabelle A in Tabelle B und auch in den Tabellen C bis Z verwiesen wird. Es sind jedoch die anderen Tabellen selbst, die das Recht haben, a nachzuschlagen Fremdschlüssel in Tabelle A, es ist kein Recht des Benutzers. Es sei denn, der Benutzer kann die Daten in Tabelle M aktualisieren, wodurch er die Werte der in Tabelle A enthaltenen Daten erneut prüfen kann.
Was andere Risiken als die Sicherheit betrifft ... Schlüssel werden dort platziert, um darauf verwiesen zu werden. Ein guter Server sollte nicht ausfallen, wenn eine Tabelle von allen anderen referenziert wird, obwohl in "Ich habe meinen eigenen SQL Server All In Javascript geschrieben" (was hoffentlich imaginär ist) etwas schief gehen könnte. Wenn eine Schlüsselspalte stark von Beziehungen und Abfragen referenziert wird, müssen ihre Spezifikation und ihre Indizierung sorgfältig abgewogen werden. Microsoft SQL ermöglicht beispielsweise, dass ein Index für die Spalten A und B als separate Kopie der Tabellendaten fungiert und die Spalten C, D und E ebenfalls in der Doppelgangertabelle enthalten sind (das Schlüsselwort INCLUDE). In der Zwischenzeit befindet sich ein weiterer Index für die Tasten A und B, wobei auch die Spalten F und G enthalten sind. Wenn dies die beiden Abfragen darstellt, die Sie am häufigsten stellen, ist dies ein zu berücksichtigendes Design.
Erfahrungsgemäß ist es äußerst unpraktisch, wenn Ihr häufig referenzierter Datenschlüssel in allen Tabellen geändert werden muss, während der Rest der Daten gleich bleibt. Wenn es sich beispielsweise um die Telefonnummer des Kunden handelt (beispielsweise um die Datenbank der Telefongesellschaft), müssen Sie die Nummer des Kunden nach störenden Anrufen ändern. Dies ist ein Grund, diese Art von Nummer nicht als Schlüssel in der gesamten Datenbank zu verwenden - obwohl es so bequem ist, Daten in einer Abfrage in der Tabelle PDQOK mit diesem praktischen Wert nachzuschlagen. Oder, schlimmer noch, der Kunde kündigt - dann geben Sie seine Nummer an jemand anderen weiter ...
quelle
Dies erweitert die Grenzen der Glaubwürdigkeit. Das einzige, woran ich denken kann, ist, dass der Angreifer durch absichtliches Verursachen von referenziellen Integritätsfehlern in der Lage ist, die Fehlermeldungen zu sammeln und Informationen über das zugrunde liegende Schema abzuleiten.
Wenn der Angreifer dies jedoch kann, haben Sie größere Sorgen.
quelle
Da Sie nicht mehr Kontext angeben als bereits verfügbar, liegt Ihr Lehrer falsch.
Solche Schemata werden in OLAP-Datenbanken als Sternschemata oder Schneeflockenschemata bezeichnet und sind dort Best Practice und Standard der Wahl. Sie würden jedoch so etwas wie
Sales number
in der zentralen Tabelle benötigen und Kunden und andere Dinge in den anderen Tabellen haben.quelle
Dies hängt von der Definition des Sicherheitsrisikos durch den Lehrer ab.
IT-Risikomanagement gemäß einem Artikel auf Wikipedia hat die folgende Definition:
Wenn Sie den Artikel weiterverfolgen, stoßen Sie auf die folgende Formel:
Jetzt können Sie Ihre Tabellendaten als Assets und ein allgemeines Risiko als Sicherheitsrisiko weiterführen und definieren, da Ihre Assets vertrauliche Daten enthalten, sodass Sie Folgendes haben:
In einem wirklich weit hergeholten Sinne kann eine Bedrohung in Kombination mit einer Sicherheitsanfälligkeit zu einem Datenverstoß in Ihren Table_Data führen . Als Ergebnis haben Sie ein Sicherheitsrisiko .
Wenn Sie nun alle relevanten Daten in Ihrer zentralen Tabelle referenzieren, kann dies aus Sicht Ihres Lehrers ein erhöhtes Sicherheitsrisiko darstellen. Dies ist jedoch sehr weit hergeholt.
Grundsätzlich kann alles als Sicherheitsrisiko definiert werden. Das hängt von Ihrer Argumentation ab.
quelle