Kerestem egy olyan megoldast ami egy adott felhasznalo teljes koru auditalasat teszi lehetove.
Termeszetesen az audit_trail init parameter korrekt beallitasa mindig szukseges, erre most nem ternek ki, reszletek itt >>>>>>>>>>>
Az evidens megoldas a :
audit all by uglyuser by access;
audit all privileges by uglyuser by access;
lenne de ez sajnos igencsak keveske. Mi tobbet szeretnenk tudni!
A dokumentacio szerint az "audit all" csak egy adott reszhalmazt audital, tehat a kovetkezoket meg meg kell tennunk:
audit
alter sequence,
alter table,
comment table,
delete table,
execute procedure,
grant directory,
grant procedure,
grant sequence,
grant table,
grant type,
insert table,
lock table,
select sequence,
select table,
update table
by uglyuser by access;
De ez nekunk meg mindig keves mert nem latjuk azokat a konkret sql-eket, amelyeket az uglyuser futtatott, pedig mi nagyon szigoru DB adminok vagyunk es mindenrol tudni akarunk! :)
Ehhez krealjunk egy FGA policy-t:
begin
DBMS_FGA.ADD_POLICY(
object_schema => 'PAYROLL',
object_name=>'SALARIES',
policy_name => 'salary_fga',
audit_condition => 'user='||'''UGLYUSER''',
statement_types => 'insert,update,delete,select');
end;
Mit is fog a fenti policy tenni? Amennyiben kedves baratunk - UGLYUSER - a payroll.salaries tablat manipulalja (barmilyen dml-lel) az audit rekord(oka)t fog generalni, amelyek szepen lathatok a DBA_FGA_AUDIT_TRAIL nezetben. (illetve a dba_common_audit_trail -ben is).
Latjuk a vegrehajtott SQL-eket, es a bind parameterek is helyettesitve vannak ! Szuper!
Azonban mi szeretnenk meg tobb tablat auditalni! Ekkor egyszeruen csak egy masik objektum nevvel egy uj policyt adunk a rendszerhez:
begin
DBMS_FGA.ADD_POLICY(
object_schema => 'PAYROLL',
object_name=>'BONUSES',
policy_name => 'payroll_fga',
audit_condition => 'user='||'''UGLYUSER''',
statement_types => 'insert,update,delete,select');
end;
A rendszerben talalhato FGA policy-k listazhatok a DBA_AUDIT_POLICIES nezetbol.
Inaktivalni FGA policy-t egy objektumon a kovetkezokepp lehetseges:
begin
DBMS_FGA.DISABLE_POLICY(
object_schema => 'PAYROLL',
object_name=>'BONUSES',
policy_name => 'payroll_fga');
end;
Ha mar nem kell, igy dobjuk el:
begin
DBMS_FGA.DROP_POLICY(
object_schema => 'PAYROLL',
object_name=>'BONUSES',
policy_name => 'payroll_fga');
end
Az Oracle szoftver altal nyujtott fine graded auditing mindennel sokkal tobb mindent tud, itt csupan azt szerettem volna bemutatni, hogyan tudjuk 1 adott felhasznalo tevekenyseget rendkivuli reszletesseggel nyomonkovetni. Nem esett szo magarol az "audit" parancs altal generalt audit rekordokrol, az egy masikbejegyzes temaja lehet.
Ajánlott bejegyzések:
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.