Audit Informatie Verzamelen met Fine Grained Auditing (FGA)

Audit Informatie Verzamelen in de Oracle Database

Audit informatie heb je nodig als je wil zien wie wat heeft gedaan in een systeem.

Oracle kent dan 2 soorten:

  • Standaard auditing
  • Fine Grained Auditing(FGA)

Voorbeelden van standaard auditing zijn:

  • Wie is ingelogd?
  • Wie heeft de structuur van een tabel gewijzigd?
  • Wie heeft de inhoud van een tabel gewijzigd?

Als het gewenst is om te bekijken wie er specifieke rijen in een tabel heeft gewijzigd of geselecteerd kun je FGA gebruiken.

Een voorbeeld hiervan kan zijn: wie heeft het salaris van de directeur bekeken?

De feature Fine Grained Auditing (fga) maakt het mogelijk om heel specifiek auditinginformatie te verzamelen, doordat er criteria kunnen worden opgegeven op basis waarvan Oracle evalueert of een actie wel of niet in de fga audit trail komt.

Met onderstaand voorbeeld wordt FGA gedemonstreerd en wordt aangegeven waarom bepaalde acties nu juist wel of niet terug te vinden zijn in deze fga audit.

Voor de voorbeelden gebruiken we tabel WINKELS, met een primary key op de id kolom:

SQL> select * from winkels;
ID NAAM                                LOCATIE_ID
--------------------------------------------------------
1 Texas Ranch                               1400
2 San Fran                                  1500
3 Jersey's                                  1600
4 Warenhuis Washington                      1700
5 Toronto                                   1800
6 Australian Auction                        2200
7 Mexican's                                 3200
8 Ting Hou Wah                              2000
9 Indoor India                              2100

In het volgende voorbeeld is onderstaande policy aangemaakt:

SQL> begin
2    dbms_fga.add_policy (object_schema => 'FGA',
3                         object_name => 'WINKELS',
4                         policy_name => 'WINKELSSELECT',
5                         audit_condition => 'locatie_id > 2000',
6                         audit_column => 'ID',
7                         statement_types => 'select');
8  end;
9  /

Wanner de parameter audit_condition opgegeven wordt, worden de parameters audit_column en audit_column_opts genegeerd.

Onderstaande queries worden nu beide geaudit:

SQL> select * from winkels where locatie_id = 2100;
SQL> select * from winkels where naam = 'Indoor India';
SQL> select sql_text from dba_fga_audit_trail;
SQL_TEXT
--------------------------------------------------
--------------------------------------------------
select * from winkels where locatie_id = 2100
select * from winkels where naam = 'Indoor India'

Delete werkt anders dan select/insert/update

Als bij een delete geen audit_condition wordt opgegeven (of audit_condition => null) wordt elke delete geaudit. Het maakt daarbij niet uit of deze nu wel of niet in de where een of meerdere audit_columns heeft staan. De waardes bij audit_column en audit_column_opts worden hier dus genegeerd.

Bij select, insert en update daarentegen worden de waardes bij audit_column en audit_column_opts wel netjes bekeken als er geen audit_condition is opgegeven.
Hierbij zijn 2 mogelijkheden:

  • Alleen acties waarbij een van de kolommen die bij audit_column staan terugkomen in het statement wordt geaudit bij audit_column_opts => dbms_fga.any_columns
  • Alleen acties waarbij alle kolommen die bij audit_column staan terugkomen in het statement worden geaudit bij audit_column_opts => dbms_fga.all_columns

Onderstaande policy is aangemaakt:

SQL> begin
2    dbms_fga.add_policy (object_schema => 'FGA',
3                         object_name => 'WINKELS',
4                         policy_name => 'WINKELSUPDATE',
5                         audit_condition => 'locatie_id > 2000',
6                         audit_column => 'ID',
7                         audit_column_opts => dbms_fga.all_columns,
8                         statement_types => 'update');
9  end;
10  /

Van onderstaande statements wordt alleen de laaste geaudit, omdat alle kolommen (audit_column_opts => dbms_fga.all_columns) die genoemd staan bij audit_column in de where clausule staan:

SQL> update winkels set naam = 'Ting' where locatie_id = 2100;
SQL> update winkels set naam = 'Ting' where id=9;
SQL> select sql_text from dba_fga_audit_trail;
SQL_TEXT
-----------------------------------------------
update winkels set naam = 'Ting' where id = 9

Onderstaande policy is aangemaakt:

SQL> begin
2    dbms_fga.add_policy (object_schema => 'FGA',
3                         object_name => 'WINKELS',
4                         policy_name => 'WINKELSDELETE',
5                         audit_condition => null,
6                         audit_column => 'ID',
7                         statement_types => 'delete');
8  end;
9  /

Onderstaande statements worden dus allebei geaudit:

SQL> delete from winkels where locatie_id = 2100;
SQL> delete from winkels where id=9;

SQL> select sql_text from dba_fga_audit_trail;

SQL_TEXT
----------------------------------------------
----------------------------------------------
delete from winkels where locatie_id = 2100
delete from winkels where id = 9

Delete met een primary of unique key constraint

Bij delete is het van belang of er een primary of unique key constraint zit op de kolom die je in de where selecteert als je ook een audit_condition hebt opgegeven. Als alleen deze kolom met sleutel wordt geselecteerd, dan wordt er niet geaudit. Als je naast deze sleutel ook de audit_condition nog opgeeft dan wordt er weer wel geaudit.

Onderstaande policy is aangemaakt:

SQL> begin
2  dbms_fga.add_policy (object_schema => 'FGA',
3                       object_name => 'WINKELS',
4                       policy_name => 'WINKELDELETE',
5                       audit_condition => 'locatie_id is not null',
6                       statement_types => 'delete');
7  end;
8  / 

Van onderstaande statements wordt dus alleen de laaste geaudit:

SQL> delete winkels where id = 9;
SQL> delete winkels where id = 9 and locatie_id = 2100;

SQL> select sql_text from dba_fga_audit_trail;

SQL_TEXT
----------------------------------------------------
delete winkels where id = 9 and locatie_id = 2100

Objecten van de gebruiker sys worden niet geaudit middels fga

Net als bij standaard database auditing worden objecten van de gebruiker sys niet geaudit.

Meer over auditing leert u in de cursus:

Oracle Database 11g: Administration deel 1a

Onderwerpen
Actieve filters: Wis alle filters
Pageloader
Algemene voorwaarden

Jouw persoonsgegevens worden opgenomen in onze beschermde database en worden niet aan derden verstrekt. Je stemt hiermee in dat wij jou van onze aanbiedingen op de hoogte houden. In al onze correspondentie zit een afmeldmogelijkheid