2008-08-29 23 views
6

Das System, an dem ich gerade arbeite, erfordert einige rollenbasierte Sicherheit, die im Java EE-Stack gut berücksichtigt wird. Das System soll ein Rahmen für Experten aus dem Bereich der Geschäftsdomäne sein, auf die sie ihren Code schreiben können.Daten 'Sicherheit' mit Java und Hibernate

Es gibt jedoch auch eine Anforderung für Daten security. Das heißt, welche Informationen für einen Endbenutzer sichtbar sind.

Dies bedeutet effektiv die Sichtbarkeit der Zeilen (und vielleicht sogar der Spalten) in der Datenbank zu reduzieren.

Wir verwenden Hibernate für unsere Persistenz. Wir verwenden jedoch unsere eigenen Anmerkungen, um unsere Persistenzwahl nicht den Experten der Geschäftsdomäne zugänglich zu machen.

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

Für spaltenbasierte Sicherheit könnten wir vielleicht @Secured haben, um entweder bei der Abfrageerzeugung zu helfen, oder vielleicht einen Aspekt verwenden, um die zurückgegebenen Informationen zu filtern?

Ich bin neugierig zu wissen, wie dies die Caching-Mechanismen von Hibernate beeinflussen könnte?

Ich bin mir sicher, dass viele andere das gleiche Problem haben werden, und ich habe mich gefragt, wie Sie das angehen?

Sehr geschätzt ...

Antwort

6

Hibernate hat ein filter mechanism die für Sie arbeiten kann. Die Filter überschreiben die Abfragen, die in Hibernate generiert werden, um eine zusätzliche Klausel einzuschließen, um die zurückgegebenen Zeilen zu begrenzen. Mir ist nichts im Ruhezustand bekannt, um Spalten zu verbergen/verbergen.

Ihre Datenbank unterstützt möglicherweise auch diese Funktionalität. Oracle hat zum Beispiel die Virtual Private Database (VPD), die Ihre Abfragen auf Datenbankebene neu schreibt. Diese Lösung hat den zusätzlichen Vorteil, dass bei externen Programmen (z. B. Reporting-Tools), die gegen Ihre Datenbank verstoßen, Ihre Sicherheitsbeschränkungen durchgesetzt werden. VPD unterstützt außerdem das Maskieren eingeschränkter Spalten mit NULL.

Leider waren die oben genannten Lösungen nicht ausreichend, um die Sicherheitsanforderungen für die Typen von Projekten, an denen ich normalerweise arbeite, zu unterstützen. Es gibt normalerweise eine Art von Kontext, der in den obigen Lösungen nicht einfach ausgedrückt werden kann. Beispielsweise können Benutzer Daten anzeigen, die sie erstellt haben oder die als öffentlich markiert wurden oder zu einem von ihnen verwalteten Projekt gehören.

Wir erstellen normalerweise Abfrage-/Finder-/DAO-Objekte, in denen wir die Werte übergeben, die zum Erzwingen der Sicherheit erforderlich sind, und dann die Abfrage entsprechend erstellen.

Ich hoffe, das

1

hilft Wenn Hibernate Filter verwenden Sie müssen sich bewusst sein, dass die zusätzlichen Einschränkungen werden nicht auf SQL-Anweisungen durch die load() oder get() Methoden generted angewendet werden.