2009-04-20 15 views
12

Znalazłem kilka wątków dyskusyjnych na ten temat - ale nic, co przyniosło porównanie wszystkich trzech mechanizmów w jednym wątku.Wdrażanie ścieżki audytu - Spring AOP vs Hypernate Interceptor vs DB Trigger

Więc tutaj jest moje pytanie ...

muszę badania DB changes- insert \ Updates \ usuwa się obiektów biznesowych.

mogę myśleć z trzech sposobów, aby to zrobić

1) dB wyzwalaczy

2) Hibernate przechwytujących

3) Wiosna AOP

(To pytanie jest specyficzne dla wiosennej \ Hibernate \ RDBMS- Domyślam się, że jest to neutralne dla java \ C# lub hibernacji \ nhibernate- ale jeśli twoja odpowiedź jest zależna od C++ lub Java lub konkretnej implementacji hibernacji - proszę podać)

Jakie są plusy i minusy wyboru jednej z tych strategii?

Nie proszę o szczegóły implementacji. -To jest dyskusja projektowa.

Mam nadzieję, że możemy zrobić to jako część społeczności wiki

+0

Istnieje inna opcja: przynajmniej niektóre bazy danych mają tę samą funkcję kontroli. Pro: bardzo odległa, prawdopodobnie wysoka wydajność; Con: bardzo specyficzny dla dostawcy –

Odpowiedz

3

Mogę mówić tylko o wyzwalaczach i NHibernate, ponieważ nie wiem, co to jest, o AOP.

Wszystko zależy od tego, co jest dla Ciebie najważniejsze.

DB wyzwala

  • są szybkie
  • nazywane są zawsze, nawet z natywnego SQL, skrypty, aplikacje zewnętrzne.
  • zapisuje dane w bazie danych, o których NH nie wie. Nie będzie go w bieżącej sesji. (Może to prowadzić do nieoczekiwanych rezultatów)
  • Zwykle nic nie wiadomo o twojej sesji (powiedzmy: login).

NHibernate przechwytujących/wydarzenia

  • DBMS nie są specyficzne.
  • umożliwiają łatwy dostęp do ciebie informacji biznesowych, jak sesji użytkownika, nazwa komputerze klienckim pewnych obliczeń lub interpretacji, lokalizacji itp
  • umożliwić Ci deklaratywny konfigurację, jak atrybutów jednostki, które określają, czy na potrzeby jednostki być zalogowanym i jak.
  • umożliwiają wyłączenie rejestrowania, może to mieć znaczenie w przypadku aktualizacji, importów, akcji specjalnych, które nie są uruchamiane przez użytkownika.
  • umożliwia wyświetlanie encji do modelu biznesowego. Prawdopodobnie zbliżasz się do punktu widzenia użytkowników.
+0

Czy możemy zalogować nazwę użytkownika, który zmienił dane przy użyciu wyzwalaczy DB? – Samurai

+0

Skąd mam wiedzieć? Możesz to zrobić tylko, jeśli znasz użytkownika w bazie danych.Zazwyczaj sesja użytkownika jest przechowywana w pamięci serwera, a DB nie wie o tym. –

2

Nie mogę myśleć o jakiejkolwiek dobry powód nie używając bazy wyzwala do badania zmian w bazie danych. Wstawianie, aktualizowanie i usuwanie może potencjalnie uderzyć w bazę danych z różnych źródeł - wyzwalacze złapią wszystkie te; Hibernacja itp. Nie będzie.

+1

Jestem z tobą, jedynym sposobem, aby upewnić się, że cała aktywność w bazie danych jest skontrolowana, jest zrobienie tego na poziomie bazy danych. – HLGEM

+0

Co jeśli chcesz przełączyć bazę danych? Przepisać wszystkie wyzwalacze? –

+0

@Icarus: to byłaby jedna z WIELU rzeczy, które powinieneś zrobić, jeśli zmienisz bazy danych, tak. W rzeczywistości firmy często nie zmieniają baz danych. –

0

Piszę, gdy rozważasz audyt, musisz zastanowić się, do czego służy. Po pierwsze, ma to być zapis, kto zmienił to, co i co się zmieniło, aby można było cofnąć złe zmiany, można zidentyfikować problemy z systemem (możemy zobaczyć, które z kilku różnych aplikacji wywołało zmianę, która pomaga szybko zidentyfikować, która z nich jest zepsuta) i możesz określić, kto wprowadził zmianę. Ostatni może być naprawdę krytyczny, jeśli chodzi o wykrywanie oszustw. Jeśli zrobisz wszystko z poziomu interfejsu użytkownika, nigdy nie zobaczysz użytkownika popełniającego oszustwo, który zmienia dane w backendach, aby napisać sobie czek. Jeśli zrobisz wszystko z poziomu interfejsu, najprawdopodobniej musisz mieć ustawione uprawnienia na poziomie stołu, otwierając tym samym drzwi do oszustwa. Jeśli zrobisz wszystko z poziomu interfejsu, nie będziesz wiedział, który niezadowolony pracownik usunął całą tabelę użytkowników dla czystej wartości irytacji. Jeśli zrobisz wszystko od przodu, nie będziesz wiedział, która niekompetentna dba przypadkowo zaktualizowała wszystkie zamówienia klientów do tego samego klienta. Nie mogę poprzeć korzystania z niczego oprócz wyzwalaczy do audytu, ponieważ tracisz znaczną część tego, dlaczego potrzebujesz audytu w pierwszej kolejności.

0

Użycie przechwytujących w trybie hibernacji do wykonania dzienników kontroli jest głęboko błędne. Jestem oszołomiony liczbą blogów, które zalecają tę metodę bez wskazywania na jej najbardziej oczywistą wadę - przechwytujący MUSI użyć nowej transakcji do zarejestrowania audytu. Co oznacza, że ​​możesz zapisać główną transakcję i mieć awarię systemu, która nie zapisuje transakcji audytu!

+0

Z pewnością nie chcesz, aby transakcja z logowaniem zakończyła się niepowodzeniem w głównej transakcji. –

+1

Myślę, że tak. Jeśli nie, to z punktu widzenia audytora twój dziennik kontroli nie jest już wiarygodną "prawdą" na temat tego, co faktycznie się wydarzyło lub co nie wydarzyło się w twoim systemie. FYI: Zaimplementowaliśmy system, w którym owijamy elementy hibernacji za pomocą Javassist, aby przechwytywać wywołania i zmiany w metodzie settter (trochę bardziej skomplikowane dla kolekcji) i przechowywać je w "zleceniu" dołączonym do transakcji (nasza warstwa na górze hibernacji to umożliwia) i bardzo ładnie uchwycić zmiany w audycie. –

0

stary pytanie, które przypadkowo na now.There jeszcze jeden wariant dostępny i jest Envers który jest dostępny także hibernacji począwszy od wersji 3.6 r ..

3

to zrozumieć nie jest w 100% w odniesieniu do pytanie, ale dodaje wartości z nowymi opcjami.

Są jeszcze dwa sposoby sprawdzenia, co się dzieje.

Odczytywanie dziennika transakcji: jeśli baza danych jest w pełnym trybie odzyskiwania, wszystkie szczegóły dotyczące instrukcji INSERT, UPDATE, DELETE i DDL są zapisywane w dzienniku transakcji.

Problem jest bardzo trudny do odczytania, ponieważ nie jest obsługiwany natywnie i potrzebny jest czytnik dzienników transakcji stron trzecich, taki jak ApexSQL Log lub SQL Log Rescue (ten drugi jest darmowy, ale obsługuje tylko sql 2000).

Zaletą tej metody jest to, że dosłownie nie trzeba wprowadzać żadnych zmian, z wyjątkiem sytuacji, w której baza danych znajduje się w pełnym trybie odzyskiwania.

Śledzenia SQL Server: Traces przechwyci wszystko w plikach śledzenia, w tym instrukcje select, które również mogą być potrzebne w niektórych scenariuszach zgodności. Minusem jest to, że ślady to pliki tekstowe, które należy przeanalizować i zorganizować.

Powiązane problemy