Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Audyt w Oracle

Jeśli masz edycję korporacyjną 10g, powinieneś zapoznać się z programem Oracle Fine-Grained Auditing. To zdecydowanie lepsze niż toczenie własnego.

Ale jeśli masz mniejszą wersję lub z jakiegoś powodu FGA nie jest w twoim guście, oto jak to zrobić. Najważniejsze jest:zbuduj osobną tabelę audytu dla każdej tabeli aplikacji .

Wiem, że to nie jest to, co chcesz usłyszeć, ponieważ nie pasuje do struktury tabeli, którą opisałeś powyżej. Ale przechowywanie wiersza z wartościami STARY i NOWY dla każdej kolumny, której dotyczy aktualizacja, to naprawdę zły pomysł:

  1. Nie skaluje się (pojedyncza aktualizacja dotykająca dziesięciu kolumn tworzy dziesięć wstawek)
  2. A co z wstawieniem rekordu?
  3. Całkowicie trudno jest zebrać stan rekordu w dowolnym momencie

Tak więc miej tabelę audytu dla każdej tabeli aplikacji o identycznej strukturze. Oznacza to uwzględnienie CHANGED_TIMESTAMP i CHANGED_USER w tabeli aplikacji, ale to nie jest złe.

Wreszcie, i wiesz, dokąd to prowadzi, w każdej tabeli ustaw wyzwalacz, który wstawia cały rekord z tylko wartościami :NEW do tabeli audytu. Reguła powinna zostać uruchomiona podczas INSERT i UPDATE. Daje to pełną historię, dość łatwo jest porównać dwie wersje rekordu. W przypadku DELETE wstawisz rekord kontroli z wypełnionym tylko kluczem podstawowym i wszystkimi pozostałymi kolumnami pustymi.

Twój sprzeciw będzie taki, że masz zbyt wiele tabel i zbyt wiele kolumn, aby zaimplementować wszystkie te obiekty. Ale dość proste jest generowanie tabeli i wyzwalanie instrukcji DDL ze słownika danych (user_tables, user_tab_columns).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego nieprawidłowa konwersja zażądała KODU BŁĘDU:17132?

  2. Jak wycofać, gdy wystąpi błąd podczas wykonywania polecenia programu ładującego sql?

  3. Funkcja NCHR() w Oracle

  4. Zapytanie, aby znaleźć pełne skany tabeli w Oracle

  5. Jak używać tablicy asocjacyjnej Oracle w zapytaniu SQL