sql >> Databáze >  >> RDS >> Oracle

Audit v Oracle

Pokud máte 10g podnikovou edici, měli byste se podívat na Fine-Grained Auditing společnosti Oracle. Je to rozhodně lepší než válet vlastní.

Ale pokud máte menší verzi nebo z nějakého důvodu FGA není podle vašeho vkusu, zde je návod, jak to udělat. Klíčová věc je:vytvořit samostatnou tabulku auditu pro každou tabulku aplikace .

Vím, že to není to, co chcete slyšet, protože to neodpovídá struktuře tabulky, kterou jste nastínili výše. Ale uložení řádku se STARÝMI a NOVÝMI hodnotami pro každý sloupec ovlivněný aktualizací je opravdu špatný nápad:

  1. Nezmění měřítko (jedna aktualizace, která se dotkne deseti sloupců, vytvoří deset vložení)
  2. A co když vložíte záznam?
  3. Shromáždit stav záznamu v kteroukoli dobu je naprostá bolest

Mějte tedy tabulku auditu pro každou tabulku aplikace s identickou strukturou. To znamená zahrnutí CHANGED_TIMESTAMP a CHANGED_USER do tabulky aplikací, ale to není špatné.

Konečně, a víte, kam to vede, mějte na každé tabulce spouštěč, který vloží celý záznam pouze s hodnotami :NEW do tabulky auditu. Spouštěč by se měl spustit při INSERT a UPDATE. To dává kompletní historii, je snadné porovnat dvě verze záznamu. Pro DELETE vložíte auditní záznam s vyplněným pouze primárním klíčem a všechny ostatní sloupce prázdné.

Vaše námitka bude, že na implementaci všech těchto objektů máte příliš mnoho tabulek a příliš mnoho sloupců. Je však dostatečně jednoduché generovat tabulku a spouštět příkazy DDL z datového slovníku (user_tables, user_tab_columns).



  1. Vytvořte datum z roku a čísla týdne v MSSQL

  2. SQL počítání všech řádků namísto počítání jednotlivých řádků

  3. Jak vytvořím tabulku Oracle s vnořenými tabulkami typů objektů?

  4. PDO::fetchAll vs. PDO::fetch ve smyčce