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

Oracle Database Security:Audyt bazy danych

W tym artykule będę kontynuował Oracle Database Security i przedstawię kilka ważnych faktów dotyczących standardowego audytu baz danych, wyzwalaczy audytu i zasad audytu w Oracle. Audyt bazy danych składa się z dwóch elementów:monitorowania i trwałej rejestracji ustalonych zestawów aktywności i zdarzeń bazy danych. Celem audytu bazy danych jest niezaprzeczalność, badanie podejrzanych działań, wykrywanie problemów generowanych przez konfiguracje dotyczące autoryzacji (dostępu do zasobów), zgodność z aktualnymi przepisami i kontrola.

Audyt standardowy

Jakie działania kontrolujemy? Uruchamianie i zatrzymywanie bazy danych oraz połączenia nawiązywane przez administratora bazy danych są domyślnie audytowane przez Oracle, a dane są automatycznie zapisywane w systemie operacyjnym. Poniższa tabela przedstawia inne czynności, które można monitorować:

Gdzie przechowujemy kontrolowane działania?

  • w bazie danych , korzystając ze ścieżki audytu bazy danych, gdzie mamy dwie możliwości:
    • audit_trail =DB
      co można zrobić za pomocą następującego kodu:

      zmień zestaw systemowy audit_trail=db zakres=spfile;
    • audit_trail =DB,EXTENDED
      za pomocą następującego kodu:

      zmień zestaw systemowy audit_trail=db, rozszerzony zakres=spfile;

    Różnica między DB i DB,EXTENDED polega na tym, że drugi wypełnia kolumny SQLBIND i SQLTEXT CLOB tabeli SYS.AUD$.

  • zewnętrzny , używając ścieżki audytu systemu operacyjnego, z następującymi możliwościami:
    • audit_trail =system operacyjny
      a użyty kod to:

      zmień zestaw systemowy audit_trail=os scope=spfile;
    • audit_trail =XML i AUDIT_FILE_DEST =ścieżka pliku (domyślnie to $ORACLE_BASE/admin/$ORACLE_SID/adump)
      z kodem:

      zmień zestaw systemowy audit_trail=xml scope=spfile;

Aby znaleźć aktualną konfigurację przechowywanych audytowanych aktywności, można uruchomić następujące zapytanie, pisane małymi literami:

wybierz wartość z v$parameter gdzie name='audit_trail';

Więcej przydatnych poleceń:

[identyfikator tabeli=43 /]

Przyjrzyjmy się teraz kilku przykładom audytu baz danych.

Oto przykład standardowego audytu z audytowanymi informacjami przechowywanymi w bazie danych:

Audytowane informacje składają się z instrukcji SELECT wykonanych w tabelach bazy danych.

W programie SQL Developer wykonaj następujący skrypt:

zmień zestaw systemowy audit_trail=db, rozszerzony zakres=spfile;AUDIT SELECT TABLE;

Następnie baza danych musi zostać zrestartowana. W tym celu w terminalu SQLPlus połącz się z nazwą użytkownika sys jako sysdba / password i uruchom następujące instrukcje:

WYŁĄCZENIE NATYCHMIASTOWE URUCHAMIANIE

Pamiętaj, że powyższe rozmiary różnią się w zależności od systemu.

Aby sprawdzić, czy ścieżka audytu jest ustawiona prawidłowo, uruchom następujące zapytanie:

wybierz wartość z v$parameter gdzie name='audit_trail';

lub:

pokaż parametr audit_trail;

Jeśli chcesz zatrzymać audyt, wykonaj:

TABELA WYBORU NOAUDIT;

Aby zobaczyć, jakie oświadczenia zostały zarejestrowane podczas audytu, możesz użyć:

wybierz dbms_lob.substr(sqltext, 4000, 1 )z SYS.AUD$gdzie OBJ$NAME IN ('PRACOWNICY','DZIAŁÓW','ZADANIA','LOKALIZACJE');

lub

wybierz liczbę(*), NAZWA_OBIEKTU$,IDUŻYTKOWNIKAz SYS.AUD$gdzie NAZWA_OBIEKTU$ IN ('PRACOWNICY','DZIAŁÓW','ZADANIE','LOKALIZACJE')grupa przez zestawienie (NAZWA OBIEKTU $, ID UŻYTKOWNIKA);

Innym przykładem jest standardowy audyt z audytowanymi danymi przechowywanymi w pliku XML, w standardowej ścieżce.

zmień zestaw systemowy audit_trail=xml scope=spfile;AUDYT WYBIERZ, WSTAW, AKTUALIZUJ, USUŃ NA pracownikach, KIEDY NIE POWODZENIE;

Ponownie uruchom ponownie bazę danych:połącz się z terminalem SQLPlus podając nazwę użytkownika sys jako sysdba / hasło i uruchom polecenia SHUTDOWN IMMEDIATE i STARTUP.

Następnie za każdym razem, gdy zapytanie wybierające, wstawiające, aktualizujące i usuwające nie powiedzie się w tabeli pracowników, powinno to zostać zapisane w pliku XML.

Gdy chcemy zatrzymać audyt, uruchamiamy w środowisku programistycznym bazy danych następujące polecenia:

NOAUDIT WSZYSTKO;NOAUDIT WSZYSTKO DOMYŚLNIE;

I przywróć domyślną ścieżkę audytu:

zmień zestaw systemowy audit_trail=db zakres=spfile;

Poniżej znajduje się przykład części pliku kontrolnego XML:

Jak usuwamy kontrolowane informacje?

Wielkość audytowanych danych może być bardzo duża ze względu na liczbę audytowanych działań i ich częstotliwość. Dlatego zaleca się okresową archiwizację audytowanych danych i usuwanie ich z systemu produkcyjnego.

Jeśli audytowane dane są przechowywane w bazie danych (database audit trail), wówczas możemy użyć instrukcji usuwania (ale dopiero po zarchiwizowaniu danych!):

USUŃ Z SYS.AUD$;

Możesz usunąć audytowane informacje dla określonego obiektu bazy danych, na przykład tabeli o nazwie produkty:

USUŃ Z SYS.AUD$ GDZIE OBJ$NAME='PRODUCTS';

Wyzwalacze audytu

Wyzwalacz to blok PL/SQL lub instrukcja CALL procedury PL/SQL, która jest wykonywana automatycznie przy każdym wystąpieniu zdarzenia. Istnieją dwa rodzaje wyzwalaczy:na poziomie bazy danych (wyrażenia bazy danych) oraz na poziomie aplikacji (na przykład naciśnięcie przycisku na formularzu Oracle). Wyzwalacze używane do inspekcji to wyzwalacze na poziomie bazy danych. Dzielą się na następujące kategorie:

  • Wyzwalacze DML – gdzie instrukcja DML jest wyzwalana w tabeli. Wyzwalacze te mogą być wykonywane raz na poziomie poleceń, niezależnie od liczby rekordów (wyzwalacze na poziomie instrukcji) lub mogą być wykonywane DLA KAŻDEGO WIERSZU (wyzwalacze na poziomie rekordu). Typy wyzwalaczy na poziomie rekordu:BEFORE STATEMENT, AFTER STATEMENT, BEFORE EACH ROW, PO KAŻDYM RZĘDZIE;
  • Wyzwalacze INSTEAD OF – gdzie instrukcja DML jest wyzwalana na widoku;
  • Wyzwalacze SYSTEM – wyzwalane przez zdarzenia takie jak uruchomienie/zatrzymanie bazy danych, instrukcje DDL, logowanie/wylogowanie użytkownika. Rodzaje wyzwalaczy systemowych:PO ZDARZENIU, PRZED WYDARZENIEM.

Odpytywanie SYS.TRIGGER$ tabeli lub ALL_TRIGGERS view oferuje informacje o wszystkich wyzwalaczach na poziomie bazy danych. Na przykład odrębny typ wyzwalacza z bazy danych można znaleźć w następujący sposób:

WYBIERZ DISTINCT TRIGGER_TYPE Z ALL_TRIGGERS;

Widok DBA_TRIGGERS zawiera informacje o wyzwalaczach automatycznie tworzonych przez produkty Oracle podczas instalacji. Jeśli chcemy znaleźć informacje o wyzwalaczach SYSTEMU („PRZED ZDARZENIEM” i „PO ZDARZENIU”), możemy uruchomić następującą instrukcję:

 SELECT SUBSTR(WŁAŚCICIEL,1,20) WŁAŚCICIEL,SUBSTR(TRIGGER_NAME,1,30),TRIGGER_NAME, SUBSTR(TRIGGERING_EVENT,1,30) TRIGGERING_EVENT,TRIGGER_TYPEFROM DBA_TRIGGERWHERE TRIGGER_TYPE='BEFORE EVENT' OR TRIGENT_TYPE'=ZAMÓWIENIE WEDŁUG TRIGGER_TYPE DESC;

Ponadto podczas instalacji wyzwalacze DML są automatycznie tworzone w schemacie użytkownika HR:

SELECT SUBSTR(TABLE_NAME,1,20) TABLE_NAME,SUBSTR(TRIGGER_TYPE,1,30) TRIGGER_TYPE,TRIGGER_BODYFROM DBA_TRIGGERWHERE OWNER='HR';

Na potrzeby audytu możemy tworzyć niestandardowe wyzwalacze, aby rejestrować żądane informacje, ale należy utworzyć specjalną tabelę do przechowywania kontrolowanych informacji.

Ważne jest, aby upewnić się, że opracowane wyzwalacze nie wpływają na normalną aktywność bazy danych. Celem audytu jest pasywne monitorowanie normalnej, codziennej aktywności bazy danych i przechowywanie jej do późniejszej analizy. W związku z tym nie zaleca się tworzenia wyzwalaczy INSTEAD OF w celu zwracania wyników z tabel docelowych do tabeli audytu.

Wyzwalacze DML na poziomie instrukcji mogą współistnieć z wyzwalaczami DML na poziomie rekordu. Kolejność wywołań:

  • wyzwalacz PRZED oświadczeniem
  • dla każdego rekordu, którego to dotyczy
    • uruchom PRZED zapisem
    • aktualne działanie DML
    • uruchom PO zapisie
  • wyzwalanie po instrukcji

Wyzwalacze zdefiniowane przez użytkownika zostaną wykonane tylko wtedy, gdy według Oracle instrukcja jest poprawna i może wystąpić. W przypadku nieprawidłowej instrukcji DML lub takiej, która narusza ograniczenie, zostanie zwrócony błąd, a wyzwalacz nie zostanie wykonany. Dlatego do audytu zaleca się używanie wyzwalaczy LMD na poziomie instrukcji.

Przykład wyzwalacza audytu:

Załóżmy, że chcemy stworzyć wyzwalacz do rejestrowania w tabeli audytu (tzw. TAB_AUDIT_EMP) informacji o zestawieniach DML, które ustalają pensje powyżej 20000 (w tym przypadku waluta nie jest ważna) dla pracowników firmy. Chcemy przechowywać w TAB_AUDIT_EMP numer sekwencyjny zapytania, nazwę użytkownika, sesję, hosta i datę.

Można to zrobić w następujący sposób:

CREATE TABLE TAB_AUDIT_EMP(secv_id NUMBER(3) PRIMARY KEY,nazwa użytkownika VARCHAR2(20),session_nr NUMBER(10),nazwa hosta VARCHAR2(100),data_zapytania DATA);UTWÓRZ SEKWENCJĘ secv_aud_emp ZACZNIJ O 1 WZROST O 1;UTWÓRZ LUB TRIGGER huge_salaryPO WSTAWIENIU LUB AKTUALIZACJI LUB USUNIĘCIU WYNAGRODZENIA PRACOWNIKÓWDLA KAŻDEGO WIERSZU, KIEDY (NEW.salary>20000)BEGINWSTAW W TAB_AUDIT_EMPVALUES(secv_aud_emp.NEXTVAL , sys_context('usersysenvuser',')'sess , sys_context('userenv', 'host'), sysdate);END;

Załóżmy, że dokonujemy modyfikacji wynagrodzenia pracowników w określonym dziale:

AKTUALIZACJA PRACOWNIKA WYNAGRODZENIE=25000WHERE ID_DEPARTMENT =1;

A potem weryfikujemy monitoring:

wybierz secv_id, substr(username,1,20) username, session_nr, substr(hostname,1,30) hostname, query_datefrom TAB_AUDIT_EMP;

Zasady audytu

Trzecia metoda audytu odnosi się do zasad audytu. Definicja zasad audytu zawiera następujące elementy:

  • określenie obiektu (schemat, nazwa obiektu, kolumny) poddawanego monitoringowi
  • specyfikację audytowanych akcji dla obiektu (SELECT, INSERT, UPDATE, DELETE):domyślnie jest to SELECT
  • określenie warunków, które muszą być spełnione, aby zarejestrować informacje poddane audytowi, odbywa się to w klauzuli WHEN wyzwalacza i jest opcjonalne
  • obsługa zdarzeń, która dodatkowo obsługuje zdarzenie, co jest opcjonalne.

Polityka audytu może być aktywna (stan ENABLED) lub nieaktywna (stan DISABLED). Listę zasad audytu można uzyskać, sprawdzając widok ALL_AUDIT_POLICIES:

WYBIERZ POLICY_TEXT, WŁĄCZ DFROM ALL_AUDIT_POLICIES

Do administrowania polityką audytu mamy pakiet DBMS_FGA. Aby korzystać z tego pakietu, konieczne jest nadanie uprawnień użytkownikom, którzy będą pisać kod PL/SQL:

przyznaj wykonanie na dbms_fga na nazwę użytkownika;

Przykład zasad audytu:

Chcemy stworzyć zasady audytu dotyczące rejestrowania instrukcji DML, które modyfikują menedżerów (MANAGER_ID) w tabeli DEPARTMENTS. Możemy wybrać utworzenie modułu obsługi dla polityki o nazwie proc_audit_alert, który informuje nas o modyfikacji dotyczącej menedżera:

UTWÓRZ LUB ZASTĄP PROCEDURĘ proc_audit_alert ( schemat_obiektu VARCHAR2, nazwa_obiektu VARCHAR2, nazwa_polityki VARCHAR2 ) ASBEGINDBMS_OUTPUT.PUT_LINE('Alert! Zmieniono menedżera!');END;

A polityka może być:

UTWÓRZ LUB ZAMIEŃ PROCEDURĘ proc_audit_manager ASBEGINDBMS_FGA.ADD_POLICY(object_schema=>'ADMINDB',object_name=>'DEPARTMENTS',policy_name=>'proc_audit_manager',audit_column=>'ID_able=_AGER',seen', ',handler_module=>'proc_audit_alert');DBMS_FGA.ENABLE_POLICY( object_schema=>'ADMINDB',object_name=>'DEPARTMENTS',policy_name=>'proc_audit_manager');END;

Zwróć uwagę, że schemat_obiektu, nazwa_obiektu, nazwa_polityki, kolumna_kontroli, typy_wypowiedzi i moduł_obsługi muszą być dostosowane do zasad, które chcesz napisać.

Następnie wykonujemy procedurę:

WYKONAJ proc_audit_manager;

Możemy zweryfikować, czy polityka jest włączona:

WYBIERZ WŁĄCZONE, POLICY_NAMEFROM ALL_AUDIT_POLICIESWHERE OBJECT_NAME='DEPARTMENTS';

Następnie sprawdź, czy procedura i polityka działają poprawnie, wykonując aktualizację:

UPDATE DEPARTMENTSSET ID_MANAGER=2WHERE ID_DEPARTAMENT=1;

Podsumowując, audyt jest niezbędny dla każdej bazy danych, a metody przedstawione powyżej pomogą Ci znaleźć podejrzaną aktywność, która może wpłynąć na bezpieczeństwo Twojej bazy danych. Więcej informacji na temat audytu bazy danych Oracle można znaleźć w poniższej bibliografii.

Bibliografia:

  • http://www.datadisk.co.uk/html_docs/oracle/auditing.htm
  • http://docs.oracle.com/cd/B10501_01/server.920/a96521/audit.htm
  • https://docs.oracle.com/cd/E11882_01/server.112/e10575/tdpsg_auditing.htm#TDPSG50000

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja RAWTONHEX() w Oracle

  2. Funkcja SIN() w Oracle

  3. Najważniejsze nowe funkcje Oracle 12c

  4. Oracle SQL:Zaktualizuj tabelę danymi z innej tabeli

  5. Jak mogę wykonać natywny skrypt SQL w JPA/Hibernacji?