Ich arbeite an einem Unternehmen und entwickle eine App, bei der der Benutzer eine CRUD-Datei verschiedener Art hat. Daten, wie wir alle wissen, könnten empfindlich sein, hängt vom Typ ab.Sicherheit auf Zeilenebene
Erstens, in meiner Firma haben wir verschiedene Arten von "Rollen". Unterschiedliche Rollen können unterschiedliche Daten anzeigen, abhängig vom Typ der Rolle. Was etwas seltsam klingt, ist, dass wir die Daten manuell filtern müssen, jede Abfrage, die wir auf dem System haben, hat die WHERE-Klausel mit den Regeln und es sieht für uns nicht richtig aus. Wir verwenden Hibernate, um unser DAO auszuführen.
Zweitens, auf meiner App ist es ein bisschen anders, aber haben das gleiche Ziel. Der Benutzer fügt Daten ein und er kann nur seine Daten sehen. Wenn er will, wird in jeder Abfrage ein Filter erstellt. Ich benutze mongodb mit Morphium, ich muss nach "Benutzer" filtern, aber hängt von dem Dokument ab, das ich suche, der Benutzer ist auf unterschiedlichem Niveau.
Beispiel:
- Jeder Fonds haben einen Benutzer;
- Jede Transaktion hat einen Fonds;
Wenn ich die Auflistung der Mittel des Benutzers i folgendes Dokument haben:
[
{
"description": "xpto",
"user": {
"login": "Someone"
}
}
]
Wenn ich die Transaktionen des Benutzers das folgende Dokument Ich habe Auflistung bin:
[
{
"value": 1234.23,
"date": "2017-01-01",
"fund": {
"description": "xpto",
"user": {
"login": "Someone"
}
}
}
]
Also, in der Abfrage von Geldern ich habe dies:
datastore.find(Fund.class).filter("user.login", getUser().getLogin());
In den Transaktionen:
datastore.find(Transaction.class).filter("funds.user.login", getUser().getLogin());
habe ich einige der Forschung und einige Ergebnisse finden, die nicht so klar für mich sind:
- Row-Level-Sicherheit;
- @filter in Hibernate
Row-Level-Security wird besser durch Datenbank gemacht. Also jede Abfrage, die gemacht wird, betrachtet die Datenbank die Regeln und filtert die Daten. Sieht doch gut aus, aber wie soll ich der Datenbank mitteilen, welcher Benutzer? Jeder Benutzer meines Systems muss in der Datenbank gewährt werden? Muss ein Benutzer in der Datenbank sein?
@Filter im Winterschlaf, macht das gleiche wie ich, aber zumindest ist es in der Klasse. In jeder Frage muss ich sagen, was ich filtern muss. Ist das Letzte meiner Wahl.
Mein Ziel ist zu verstehen, wie funktioniert es heutzutage? Wie weiß Trello, welche Karten vom Benutzer stammen? Wie Facebook weiß, welcher Beitrag dein ist? Wie filtern sie den Datensatz? Ist es normal, den Filter in jeder Abfrage zu machen? Haben sie das in der Datenbank oder in der Anwendung gemacht?