PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Audyt PostgreSQL za pomocą pgAudit

Audyt w technologiach informatycznych (IT) to proces badania infrastruktury informatycznej organizacji w celu zapewnienia zgodności z wymaganiami nałożonymi przez uznane standardy lub ustalone zasady. Zasady ochrony danych, takie jak nowe przepisy RODO, stają się coraz bardziej rygorystyczne, aby chronić dane użytkowników, dlatego ważne jest, aby audyty bazy danych były odpowiednio skonfigurowane, aby zapewnić ochronę zarówno aplikacji, jak i danych użytkownika przed lukami w zabezpieczeniach. W tym poście na blogu omówimy pgAudit – narzędzie, które generuje logi audytu potrzebne do ułatwienia audytu PostgreSQL.

Co to jest pgAudit?

Rozszerzenie audytu PostgreSQL, pgAudit, to rozszerzenie typu open source, które rejestruje zdarzenia w bazie danych PostgreSQL w szczegółowym dzienniku audytu. Wykorzystuje natywną funkcję rejestrowania PostgreSQL, więc logi audytu będą częścią dzienników PostgreSQL. Rozszerzenie opiera się na projekcie 2ndQuadrant pgAudit, którego autorami są Simon Riggs, Abhijit Menon-Sen i Ian Barwick, i zawiera ulepszenia Davida Steele z Crunchy Data.

Dlaczego pgAudit przez log_statement=all?

Możemy rejestrować wszystkie instrukcje w PostgreSQL po prostu ustawiając log_statement=all . Po co więc w ogóle używać pgAudit? Logowanie podstawowych instrukcji (za pomocą log_statement ) wyświetla tylko operacje wykonywane na bazie danych. Nie zapewni możliwości filtrowania operacji, a logi nie będą miały odpowiedniego formatowania wymaganego do audytu. pgAudit dodatkowo zapewnia szczegółowość rejestrowania określonych klas instrukcji, takich jak READ (SELECT i COPY ), WRITE (INSERT , UPDATE , DELETE itp.), DDL itp. Ponadto zapewnia audyt na poziomie obiektu, w którym rejestrowane będą tylko operacje na określonych relacjach.

Kolejną zaletą pgAudit w porównaniu z rejestrowaniem podstawowych instrukcji jest to, że udostępnia szczegóły wykonywanej operacji, a nie tylko rejestrowanie żądanej operacji. Na przykład rozważ wykonanie bloku anonimowego kodu za pomocą instrukcji DO.

DO $$
BEGIN
	EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
END $$;

Podstawowe rejestrowanie wyciągów spowoduje:

2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG:  statement: DO $$
        BEGIN
            EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
        END $$;

pgAudit zarejestruje tę samą operację, co:

2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG:  AUDIT: SESSION,4,1,FUNCTION,DO,,,"DO $$
        BEGIN
            EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
        END $$;",<not logged>
2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG:  AUDIT: SESSION,4,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT),<not logged>

Powyższe wyraźnie wskazuje funkcjonalność pgAudit, która rejestruje operację i jej elementy wewnętrzne za pomocą ustrukturyzowanych danych wyjściowych, które ułatwiają wyszukiwanie.

Jak przeprowadzić audyt PostgreSQL za pomocą pgAuditKliknij, aby tweetować

Jak zainstalować pgAudit?

pgAudit to rozszerzenie, które można pobrać z repozytorium PostgreSQL lub można je skompilować i zbudować ze źródeł. W pierwszym kroku pakiet musi zostać pobrany i zainstalowany na komputerze z uruchomionym PostgreSQL (ten pakiet rozszerzeń jest preinstalowany we wszystkich wdrożeniach ScaleGrid PostgreSQL).

Po zainstalowaniu należy go załadować do PostgreSQL. Osiąga się to przez dodanie pgaudit do shared_preload_libraries parametr konfiguracyjny. Aby zmiana konfiguracji zaczęła obowiązywać, wymagane jest ponowne uruchomienie PostgreSQL. Następnym krokiem jest włączenie rozszerzenia w bazie danych, uruchamiając CREATE EXTENSION pgaudit .

Teraz, gdy rozszerzenie jest gotowe, musimy upewnić się, że ustawiliśmy parametry konfiguracyjne dla rozszerzenia, aby rozpocząć rejestrowanie. Może to być tak proste, jak ustawienie parametru pgaudit.log do wartości all a pgAudit rozpocznie logowanie w session tryb.

Teraz, gdy wiemy już, jak zainstalować i włączyć pgAudit, omówmy dwa oferowane przez niego tryby rejestrowania audytu:sesję i obiekt.

Logowanie audytu sesji

W trybie sesji pgAudit rejestruje wszystkie operacje wykonywane przez użytkownika. Ustawianie pgaudit.log parametr na dowolną ze zdefiniowanych wartości, inną niż NONE , umożliwi rejestrowanie audytu sesji. pgaudit.log parametr określa klasy wyciągów, które będą logowane w trybie sesyjnym. Możliwe wartości to:READ , WRITE , FUNCTION , ROLE , DDL , MISC , MISC_SET , ALL i NONE .

Ustawianie pgaudit.log parametr do ALL zarejestruje wszystkie wyciągi. Parametr może akceptować wiele klas przy użyciu listy oddzielonej przecinkami, a określone klasy można wykluczyć znakiem –. Na przykład, jeśli chcesz rejestrować wszystkie instrukcje z wyjątkiem MISC klasa, wartość pgaudit.log będzie ALL, -MISC, -MISC_SET . Możesz także włączyć pgAudit, aby utworzyć oddzielny wpis dziennika dla każdego odniesienia do relacji w instrukcji, ustawiając pgaudit.log_relation do włączenia.

Rozważ przykład tworzenia tabeli. Instrukcja SQL będzie wyglądać tak:

CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));

Odpowiednie wpisy w dzienniku kontroli to:

2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG:  AUDIT: SESSION,5,1,DDL,CREATE SEQUENCE,SEQUENCE,public.persons_id_seq,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged>
2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG:  AUDIT: SESSION,5,1,DDL,CREATE TABLE,TABLE,public.persons,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged>
2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG:  AUDIT: SESSION,5,1,DDL,CREATE INDEX,INDEX,public.persons_pkey,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged>
2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG:  AUDIT: SESSION,5,1,DDL,ALTER SEQUENCE,SEQUENCE,public.persons_id_seq,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged>

Logowanie audytu obiektów

W szczególnych przypadkach może być wymagane przeprowadzenie audytu tylko określonego zestawu relacji. W takich przypadkach użycie trybu sesji spowoduje jedynie niepotrzebnie dużą liczbę dzienników audytu, które nie odpowiadają wymaganym relacjom. Tryb obiektowy jest szczególnie odpowiedni do tego celu i może kontrolować tylko określony zestaw relacji.

Logowanie audytu obiektów odbywa się za pomocą ról PostgreSQL. Można utworzyć rolę i przypisać uprawnienia dostępu tylko do określonego zestawu relacji. Ta rola powinna być określona w parametrze konfiguracyjnym pgaudit.role . Tryb obiektowy obsługuje tylko SELECT , INSERT , UPDATE i DELETE sprawozdania. Klasy instrukcji, które są rejestrowane, zależą od uprawnień przyznanych roli. Na przykład, jeśli rola ma uprawnienia do wykonywania tylko SELECT , potem tylko SELECT wyciągi będą rejestrowane.

Poniżej znajduje się przykład rejestrowania audytu obiektów:

Utwórz rolę i przyznaj tylko SELECT uprawnienia. Ustaw pgaudit.role do tej roli i uruchom SELECT Instrukcja SQL:

CREATE ROLE audit_person;
GRANT SELECT ON persons TO audit_person;
SET pgaudit.role = 'audit_person';
SELECT * FROM persons WHERE ID=404;

Powyższa instrukcja select zostanie zarejestrowana jako:

2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: LOG:  AUDIT: OBJECT,10,1,READ,SELECT,TABLE,public.persons,select * from persons where ID=404;,<not logged>

Zainteresowany w pełni zarządzanym rozwiązaniem PostgreSQL?

Aby dowiedzieć się więcej o tym, jak dostawca DBaaS, taki jak ScaleGrid, może pomóc w zarządzaniu bazami danych PostgreSQL, odwiedź naszą stronę PostgreSQL. Zobacz, jak ScaleGrid może pozwolić Ci skupić się bardziej na rozwoju produktu, a mniej na zarządzaniu bazami danych.

Jak interpretować wpis w dzienniku kontroli?

Do tej pory przedstawiliśmy szczegółowe informacje o tym, jak wygląda wpis w dzienniku kontroli, teraz przyjrzyjmy się formatowi wpisu w dzienniku kontroli. Każdy wpis zaczyna się od log_line_prefix wspomnianego przy logowaniu PostgreSQL, a reszta danych wyjściowych będzie w formacie CSV. Rozważ następujący prosty wpis w dzienniku kontroli:

2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: LOG:  AUDIT: OBJECT,10,1,READ,SELECT,TABLE,public.persons,select * from persons where ID=404;,<not logged>

W powyższym wpisie wartość

2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: 

ma format log_line_prefix %t:%r:%u@%d:[%p]: . Treść wpisu kontroli zaczyna się od LOG: AUDIT: wartość i jest zgodny z formatem CSV. Format wartości ma postać:

AUDIT_TYPE,STATEMENT_ID,SUBSTATEMENT_ID,CLASS,COMMAND,OBJECT_TYPE,OBJECT_NAME,STATEMENT,PARAMETER

Przyjrzyjmy się kolejno każdemu z pól:

Pole Opis Wartość z przykładowego wpisu audytu
AUDIT_TYPE Wskazuje tryb kontroli:SESJA lub OBIEKT OBIEKT
STATEMENT_ID Unikalny identyfikator instrukcji dla każdej sesji 10
SUBSTATEMENT_ID Identyfikator dla każdej instrukcji podrzędnej w ramach instrukcji głównej 1
KLASA Wskazuje klasę instrukcji, takich jak READ, WRITE itp., które są zdefiniowanymi wartościami parametru pgaudit.log. CZYTAJ
POLECENIE Polecenie użyte w instrukcji SQL SELECT
OBJECT_TYPE Może to być TABELA, INDEKS, WIDOK itp. TABELA
OBJECT_NAME W pełni kwalifikowana nazwa obiektu public.persons
OŚWIADCZENIE Rzeczywiste wykonanie instrukcji wybierz * z osób gdzie ID=404;
PARAMETR Gdy parametr pgaudit.log_parameter ma wartość true, cytowany plik CSV parametrów jest wyświetlany, jeśli jest obecny, lub „brak”, jeśli nie ma parametrów. Gdy parametr pgaudit.log_parameter nie jest ustawiony, wartością będzie „

Wnioskowanie

pgAudit, ze wszystkimi swoimi możliwościami, upraszcza proces audytu poprzez generowanie dziennika audytu. Chociaż istnieje kilka zastrzeżeń, takich jak rejestrowanie obiektów o zmienionych nazwach pod tą samą nazwą, nadal jest to solidne narzędzie, które zapewnia wymaganą funkcjonalność. Jednak informacje z audytu zapisane w dziennikach mogą nie być po prostu idealne dla procesu audytu – proces audytu jest jeszcze lepszy, gdy te logi można przekonwertować na schemat bazy danych, a dane audytu można załadować do bazy danych, dzięki czemu można łatwo przeszukiwać Informacja. Tutaj pomocny jest Analizator logów audytu PostgreSQL (pgAudit Analyze). Więcej informacji można znaleźć na stronach github pgAudit i pgAudit Analyze.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zresetować uruchomioną sumę po osiągnięciu progu?

  2. Postgres FOR LOOP

  3. „OSTRZEŻENIE:znaleziono niezgodność między sl_table a pg_class”. w Słonym-I

  4. Instrukcja IF PostgreSQL

  5. Oblicz godziny pracy między 2 datami w PostgreSQL