2016-07-14 4 views
2

Was ist der beste Ansatz zu implementieren Zeile Ebene Sicherheit im Frühjahr Web-Anwendung und ihre Datenbank? Ich habe viele Tabellen, die Anwendungsbenutzerdaten enthalten. Der Benutzer kann nur seine eigenen Zeilen auswählen, aktualisieren und löschen. Der Benutzer ist in der Tabelle in der Datenbank definiert und protokolliert die Anwendung mit Federsicherheit. Ich verwende ein Datenbankkonto, um eine Verbindung zwischen Anwendung und Datenbank herzustellen.Spring Application Datenbank Zeile Ebene Sicherheit besten Ansatz

Meine Idee ist, Spalte mit Benutzernamen in jeder Tabelle zu erstellen (brauche ich Beziehungen hier?). Jetzt kann ich einfach 'where username = <username>' in Backend-Abfragen hinzufügen. Ist es eine gute Idee? Was ist der häufigste Ansatz in solchen Fällen?

Ich verwalte den Datenzugriff mit JPA und Hibernate.

Antwort

0

Ich denke, Sie müssen einen Besitzer für jedes Objekt definieren, das Sie validieren müssen. Sie können den Benutzer in der Datenbank mit einer WHERE-Klausel validieren.

Sie können jedoch auch einen weiteren Layer in der Methode mit Spring @PostFilter hinzufügen. Sie können das zurückkehrende Objekt filtern.

@PostFilter ("filterObject.owner == authentication.name") öffentliche Liste getMyObjects();

Sie können mehr hier sehen.

http://www.concretepage.com/spring/spring-security/prefilter-postfilter-in-spring-security

+1

Es wird nur auf der Anwendungsseite filtern, Sie können Leistungsprobleme haben, sobald Sie alles (abhängig von Ihrer WHERE-Klausel) aus der Datenbank vor dem Filter abrufen. Es ist besser, zu einer anderen Lösung zu wechseln, die die Datenbank where-Klausel filtert (mit JPA, Spring Data oder einer anderen Lösung). –

0

Einige Datenbanken haben bereits auf Zeilenebene Sicherheitsmerkmal. Oracle bieten Virtual Private Database, PostreSQL haben alter table ... enable row level security;. SQL Server hat diese Funktion auch. In anderen Datenbanken müssen Sie alle Arbeiten manuell erledigen (über die Hilfsspalte in der Tabelle oder/und die spezielle Überprüfung in der Wrapper-Ansicht): question about mysql on SE, MairaDB.

Verwandte Themen