2008-08-29 21 views
6

System, nad którym obecnie pracuję, wymaga bezpieczeństwa opartego na rolach, które jest dobrze zaspokojone w stosie Java EE. System ma być podstawą dla ekspertów z dziedziny biznesu, którzy będą mogli pisać swój kod.Dane "bezpieczeństwo" z java i hibernacji

Istnieje jednak również wymóg dla danych security. To jest, jakie informacje są widoczne dla użytkownika końcowego.

To skutecznie oznacza ograniczenie widoczności wierszy (a może nawet kolumn) w bazie danych.

Używamy Hibernate dla naszej trwałości. Jednak używamy własnych adnotacji, aby nie ujawniać naszego wyboru trwałości ekspertom w dziedzinie biznesu.

Dla bezpieczeństwa opartego na wierszach oznacza to, że możemy dodać adnotację, taką jak @Secured na poziomie jednostki, co spowodowałoby dodanie dodatkowej kolumny do tabeli podstawowej w celu ograniczenia naszych wyborów?

Dla bezpieczeństwa opartego na kolumnach, możemy być może mieć @Secured, aby pomóc w generowaniu zapytań, a może użyć aspektu do filtrowania zwróconych informacji?

Zastanawiam się, jak to wpłynie na mechanizmy buforowania w hibernacji?

Jestem pewien, że wielu innych będzie miało ten sam problem, i zastanawiałem się, jak się do tego zbliżyłeś?

Cenione ...

Odpowiedz

6

Hibernate ma filter mechanism które mogą pracować dla Ciebie. Filtry przerobią zapytania generowane przez hibernację w celu dodania dodatkowej klauzuli w celu ograniczenia zwracanych wierszy. Nie zdaję sobie sprawy z niczego w stanie hibernacji, aby zamaskować/ukryć kolumny.

Twoja baza danych może również obsługiwać tę funkcję. Oracle, na przykład, ma Virtual Private Database (VPD), który przerobi twoje zapytania na poziomie bazy danych. To rozwiązanie ma dodatkową zaletę, że wszelkie zewnętrzne programy (na przykład narzędzia do raportowania), które są sprzeczne z twoją db, będą podlegały restrykcjom bezpieczeństwa. VPD obsługuje również maskowane kolumny z ograniczeniami o wartości NULL.

Niestety, powyższe rozwiązania nie były wystarczające, aby wesprzeć wymagania bezpieczeństwa dla typów projektów, nad którymi zazwyczaj pracuję. Zwykle jest jakiś kontekst, którego nie da się łatwo wyrazić w powyższych rozwiązaniach. Na przykład użytkownicy mogą wyświetlać dane, które utworzyli lub które zostały oznaczone jako publiczne lub należą do zarządzanego przez nich projektu.

Zazwyczaj tworzymy obiekty zapytania/wyszukiwania/DAO, w których przekazujemy wartości wymagane do wymuszenia zabezpieczeń, a następnie odpowiednio je tworzymy.

Mam nadzieję, że to pomoże

1

Przy użyciu filtrów Hibernate musisz mieć świadomość, że dodatkowe ograniczenia nie będą stosowane do instrukcji SQL generted przez load() lub get() metod.