Frage

Das System, an dem ich gerade arbeite, erfordert eine gewisse rollenbasierte Sicherheit, die im Java EE-Stack gut berücksichtigt wird.Das System soll ein Framework sein, auf dem Experten aus der Geschäftsdomäne ihren Code schreiben können.

Es besteht jedoch auch ein Bedarf an Daten security.Das heißt, welche Informationen für einen Endbenutzer sichtbar sind.

Dies bedeutet effektiv, dass die Sichtbarkeit von Zeilen (und möglicherweise sogar Spalten) in der Datenbank verringert wird.

Wir verwenden Hibernate für unsere Persistenz.Wir verwenden jedoch unsere eigenen Anmerkungen, um unsere Persistenzauswahl nicht den Experten der Geschäftsdomäne preiszugeben.

Für die zeilenbasierte Sicherheit bedeutet dies, dass wir eine Anmerkung hinzufügen könnten, z @Secured auf Entitätsebene, was dazu führen würde, dass der zugrunde liegenden Tabelle eine zusätzliche Spalte hinzugefügt wird, um unsere Auswahl einzuschränken?

Für spaltenbasierte Sicherheit könnten wir das vielleicht tun @Secured um entweder bei der Abfragegenerierung zu helfen oder vielleicht einen Aspekt zum Filtern der zurückgegebenen Informationen zu verwenden?

Ich bin gespannt, wie sich dies auch auf die Caching-Mechanismen des Ruhezustands auswirken könnte.

Ich bin sicher, dass viele andere das gleiche Problem hatten, und ich habe mich gefragt, wie Sie das angegangen sind?

Sehr geschätzt...

War es hilfreich?

Lösung

Hibernate hat eine Filtermechanismus Das könnte für Sie funktionieren.Die Filter schreiben die von Hibernate generierten Abfragen neu und enthalten eine zusätzliche Klausel zur Begrenzung der zurückgegebenen Zeilen.Mir ist im Ruhezustand nichts bekannt, um Spalten zu maskieren/auszublenden.

Möglicherweise unterstützt Ihre Datenbank diese Funktionalität auch.Oracle zum Beispiel hat das Virtuelle private Datenbank (VPD), das Ihre Abfragen auf Datenbankebene neu schreibt.Diese Lösung hat den zusätzlichen Vorteil, dass jedes externe Programm (z. B.Berichtstools), die gegen Ihre Datenbank verstoßen, werden Ihre Sicherheitsbeschränkungen durchgesetzt.VPD unterstützt auch die Maskierung eingeschränkter Spalten mit NULL-Werten.

Leider waren die oben genannten Lösungen nicht ausreichend, um die Sicherheitsanforderungen für die Arten von Projekten zu erfüllen, an denen ich normalerweise arbeite.Normalerweise gibt es einen Kontext, der in den oben genannten Lösungen nicht einfach ausgedrückt werden kann.Benutzer können beispielsweise Daten anzeigen, die sie erstellt haben, die als öffentlich markiert wurden oder zu einem von ihnen verwalteten Projekt gehören.

Normalerweise erstellen wir Abfrage-/Finder-/DAO-Objekte, in denen wir die zur Durchsetzung der Sicherheit erforderlichen Werte übergeben und dann die Abfrage entsprechend erstellen.

ich hoffe das hilft

Andere Tipps

Wenn Sie Hibernate-Filter verwenden, müssen Sie sich darüber im Klaren sein, dass die zusätzlichen Einschränkungen nicht auf SQL-Anweisungen angewendet werden, die von generiert werden load() oder get() Methoden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top