Audit trigger PL/pgSQL
Obsah článku:
Audit trigger PL/pgSQL
Ide o trigger, ktorý zaznamenáva všetky zmeny (INSERT, DELETE, UPDATE) v tabuľke výplat. Pokiaľ potrebujeme vedieť kto, čo a kedy upravil, či pridal do tabuľky, použijeme trigger, ktorý bude zapisovať každú akciu vykonanú v tabuľke. Od Postgres verzie 9.3, môžeme auditovať aj DDL(Data definition language) zmeny v databáze použitím event triggeru. V tomto konkrétnom príklade budeme zapisovať aktivitu spojenú s Data Manipulation Language (DML).
Dostupné online:
REXtester
Štruktúra DB - Diagram
Vytvorenie DB a tabuliek
|
|
Prístupové práva
Obyčajne nechceme aby užívatelia mohli meniť tabuľku s logmi. Toto privilégium bude mať iba manažment.
- tabuľka s logmi nebude verejná
- manažéri spoločnosti máju prístup k tabuľke12REVOKE ALL ON vyplaty_zmeny_log FROM PUBLIC;GRANT ALL ON vyplaty_zmeny_log TO manazery;
Funkcia
Funkcia spustená triggerom, ktorá sa stará o zápis údajov do tabuľky zmien pri udalosti:
- INSERT
- UPDATE
- DELETE12345678910111213141516171819CREATE OR REPLACE FUNCTION log_vyplaty_zmeny()RETURNS TRIGGER AS $$BEGINIF TG_OP = 'INSERT'THENINSERT INTO vyplaty_zmeny_log (druh_operacie, meno_zamestnanca, novy_plat)VALUES (TG_OP, NEW.meno_zamestnanca, NEW.plat);ELSIF TG_OP = 'UPDATE'THENINSERT INTO vyplaty_zmeny_log (druh_operacie, meno_zamestnanca, stary_plat, novy_plat)VALUES (TG_OP, NEW.meno_zamestnanca, OLD.plat, NEW.plat);ELSIF TG_OP = 'DELETE'THENINSERT INTO vyplaty_zmeny_log (druh_operacie, meno_zamestnanca, stary_plat)VALUES (TG_OP, NEW.meno_zamestnanca, OLD.plat);END IF;RETURN NEW;END;$$ LANGUAGE plpgsql SECURITY DEFINER;
Trigger
Trigger, ktorý zavolá funkciu po každej zmene, či pridaní záznamu do tabuľky výplaty:
Test
Pridanie výplaty zamestnanca:
Zmena výplaty zamestnanca:
|
|
Výpis tabuľky výplat:
Každá zmena vykonaná v tabuľke výplaty, bude uložená do loggovacej tabuľky na účely auditu.
Výpis zmien