Ich habe eine App, die zu verschiedenen Datenbanken auf einer Mongodb-Instanz verbindet. Die verschiedenen Datenbanken sind für verschiedene Clients. Ich möchte wissen, ob meine Client-Daten kompromittiert werden, wenn ich mich mit einem einzigen Benutzer bei den verschiedenen Datenbanken anmelde. Ist es für diesen Benutzer ein Muss, root zu sein? die Rolle readWrite wird den Trick machen. Ich werde Verbindung zu den Datenbanken über ein Java-Backend herstellen.Ist es unsicher, einen Root-Benutzer für mongodb zu verwenden?
Antwort
Es gibt keine einfache Antwort darauf. Es geht um Risiko und Kosten-Nutzen.
Wenn Sie denselben Datenbankbenutzer zum Herstellen einer Verbindung mit einer Datenbank verwenden, hängt die Trennung der Clientdaten viel mehr von der Geschäftslogik in Ihrer Anwendung ab. Wenn irgendein Teil Ihres Codes sich nur dazu entschließen kann, eine Verbindung zu einer beliebigen Client-Datenbank herzustellen, dann kann eine Anfrage von einem Client (und meiner Erfahrung nach möglicherweise) in einer anderen Client-Datenbank landen. Einige Faktoren machen dies wahrscheinlicher, zum Beispiel, wenn viele Leute Ihre App für eine längere Zeit entwickeln, wird jemand einen Fehler machen. Eine sicherere Option wäre eine zentrale Komponente oder eine Komponente, die nur sehr selten geändert wird, wobei Änderungen streng überwacht werden, die für jede Clientsitzung (oder sogar Anforderung) die Anmeldeinformationen für den Client übernehmen und diese zum Herstellen einer Verbindung verwenden zur Datenbank. Auf diese Weise würde jeder zukünftige Fehler eines Entwicklers in seinem Umfang begrenzt sein, sie wären beispielsweise nicht in der Lage, die falsche Datenbank zu verwenden. Und dann haben wir keine nicht vorsätzlichen Anwendungsfehler erwähnt, die es einem Angreifer ermöglichen würden, dasselbe zu tun, und die viel wahrscheinlicher sind. Wenn Sie eine starke Durchsetzung und Trennung an Ort und Stelle haben, kann ein böswilliger Benutzer von einem Client möglicherweise nicht auf andere Clientdaten zugreifen, selbst im Falle von Anwendungsschwachstellen, da die Verbindung auf die richtige Datenbank beschränkt wäre. (Beachten Sie, dass Ihre Anwendung auch in diesem Fall Zugriff auf alle Anmeldeinformationen der Client-Datenbank haben muss, sodass ein vollständiger Verstoß gegen Ihre Anwendung oder den Server immer noch alle Client-Daten für den Angreifer bedeuten würde. Aber nicht jeder erfolgreiche Angriff endet mit einer vollständigen Kompromittierung.)
Ob Sie dies tun oder nicht, sollte von Risiken abhängen. Eine Frage, die Sie beantworten sollten, ist, wie viel es Sie kosten würde, wenn eine clientübergreifende Datenpanne passieren würde. Wenn es keine große Sache ist, ist wahrscheinlich die Trennung in der Geschäftslogik in Ordnung. Wenn es bedeutet, aus dem Geschäft zu gehen, ist es definitiv nicht genug.
Wie für den Benutzer für die Verbindung verwendet werden sollte root sein - nein, definitiv nicht. Nach dem Prinzip der geringsten Rechte sollten Sie einen Benutzer verwenden, der nur die Rechte an den Dingen hat, die er benötigt, d. Verbindung zu dieser Datenbank und sonst nichts.
- 1. Ist es jemals unsicher, ein SQL Connection-Objekt zu committen?
- 2. PHP define() unsicher für MySQL-Datenbankvariablen zu verwenden?
- 3. Ist es möglich, einen Pfad für #include zu verwenden?
- 4. Ist es üblich, Großbuchstaben für einen JavaScript-Namespace zu verwenden?
- 5. Ist es gut, einen Formbuilder zu verwenden?
- 6. Warum ist Generics.Collections.TObjectList.List unsicher?
- 7. Ist es möglich, mongodb mit sqlalchemy zu verwenden?
- 8. Ist .net inhärent unsicher
- 9. Ist es möglich, einen Unicode "argv" zu verwenden?
- 10. Wann ist es praktisch, einen Parsergenerator zu verwenden?
- 11. Ist es möglich, einen Bereich als Schlüssel für einen Hash in Ruby zu verwenden?
- 12. Ist es möglich, einen Prototyp dafür in Javascript zu verwenden?
- 13. Firefox lädt Vimeo Player nicht, da es unsicher ist
- 14. Ist es möglich, einen Datensatz als Datensatzelement zu verwenden?
- 15. Ist es möglich, einen Konverter in einem Stil zu verwenden?
- 16. jClouds: Ist es sicher, nur einen BlobStore zu verwenden
- 17. Ist es unsicher, dem Benutzer seine eigene Sitzungs-ID zur Verfügung zu stellen?
- 18. Ist es möglich, affdex-sdk in node.js zu verwenden und Emotionsdaten in mongodb zu speichern?
- 19. Ist der Löffel in Haskell unsicher?
- 20. Ist es sicher, MoreExecutors.directExecutor für Future.sequence zu verwenden?
- 21. Ist maxOccurs = "unbounded" in XSD unsicher?
- 22. Ist es akzeptabel, std :: merge für überlappende Bereiche zu verwenden
- 23. Ist es gut CookieStor für unter Szenario zu verwenden
- 24. Es ist immer sicher unsafeCoerce für gültige Gleichheiten zu verwenden?
- 25. TBB gleichzeitige Warteschlange, wie unsicher ist unsafe_size?
- 26. Ist es möglich, benutzerdefinierte Datentypen für MOSS-Benutzerprofileigenschaften zu verwenden?
- 27. Ist es schlecht, denselben Logger für verschiedene Anwendungen zu verwenden
- 28. Ist es falsch, geschweifte Klammern für verschiedene Zwecke zu verwenden?
- 29. Gibt es einen Grund, System.Uri zu verwenden?
- 30. Gibt es eine Möglichkeit, Generika in MongoDB Client zu verwenden?