Verfijnde auditing -Fine Grained Auditing (FGA) - breidt de standaard Oracle auditing mogelijkheden uit door gebuikers toe te staan 'user-gedefinieerde inhoud' te auditten. Dit is onafhankelijk van de AUDIT_TRAIL parameter setting en alle audit records worden opgelsagen in de
FGA_LOG$ tabel, in plaats van de AUD$ tabel. Het volgende voorbeeld hoe deze te gebuiken:
Eerste en test tabel maken:
CONN audit_test/password
CREATE TABLE emp (empno NUMBER(4) NOT NULL,ename VARCHAR2(10),job VARCHAR2(9),mgr NUMBER(4),hiredate DATE,sal NUMBER(7,2),comm NUMBER(7,2),deptno NUMBER(2));INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Tim', 1);INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Larry', 50001);
COMMIT;
De volgende policy audits alle queries op de salary tabel met salarissen boven £50,000.
CONN sys/password AS sysdba
BEGIN
DBMS_FGA.add_policy(object_schema => 'AUDIT_TEST',
object_name => 'EMP',
policy_name => 'SALARY_CHK_AUDIT',
audit_condition => 'SAL > 50000',
audit_column => 'SAL');
END;
/
Door beide employees te querien bewijs je je juiste werking:
CONN audit_test/passwordSELECT sal
FROM emp
WHERE ename = 'Tim';
SELECT sal
FROM emp
WHERE ename = 'Larry';
CONN sys/password AS SYSDBA
SELECT sql_text
FROM dba_fga_audit_trail;
SQL_TEXT
-----------------------------------------
SELECT sal FROM emp WHERE ename = 'Larry'
1 row selected.
SQL>
Extra processing kan geassocieerd worden met een FGA event door een procedure te definieren en de associeren aan een audit event. Een voorbeeld gaat er van uit dat de FIRE_CLERK procedure gedefinieerd is:
BEGIN
DBMS_FGA.add_policy(object_schema => 'AUDIT_TEST',
object_name => 'EMP',
policy_name => 'SALARY_CHK_AUDIT',
audit_condition => 'SAL > 50000',
audit_column => 'SAL',
handler_schema => 'AUDIT_TEST'
,handler_module => 'FIRE_CLERK',
enable => TRUE);
END;
/
De DBMS_FGA package bevat de volgende procedures:
ADD_POLICY
DROP_POLICY
ENABLE_POLICY
DISABLE_POLICY
In Oracle9i was fine grained auditing gelimitteerd aan queries maarin Oracle 10g is het uitgebreid met DML statements, zoals je in het volgende voorbeeld kan zien:
--Schoon de audit trail.
CONN sys/password AS SYSDBATRUNCATE TABLE fga_log$;
SELECT sql_text
FROM dba_fga_audit_trail;
no rows selected.
-- Voeg de policy toe aan de SAL kolom van de EMP tabel.
BEGIN
DBMS_FGA.add_policy(
object_schema => 'AUDIT_TEST',
object_name => 'EMP',
policy_name => 'SAL_AUDIT',
audit_condition => NULL, -- Equivalent to TRUE
audit_column => 'SAL',
statement_types => 'SELECT,INSERT,UPDATE,DELETE');
END;
/
-- Test de auditing.
CONN audit_test/passwordSELECT * FROM emp WHERE empno = 9998;
INSERT INTO emp (empno, ename, sal) VALUES (9998, 'Bill', 1);
DELETE emp WHERE empno = 9998;
ROLLBACK;
-- Check de audit trail.
CONN sys/password AS SYSDBA
SELECT sql_text FROM dba_fga_audit_trail;SQL_TEXT
--------------------------------------
SELECT * FROM emp WHERE empno = 9998
INSERT INTO emp (empno, ename, sal) VALUES (9998, 'Bill', 1)
UPDATE emp SET sal = 10 WHERE empno = 9998
DELETE emp WHERE empno = 99984
4rows selected.
-- Drop de policy.
CONN sys/password AS SYSDBA
BEGIN
DBMS_FGA.drop_policy(object_schema => 'AUDIT_TEST',
object_name => 'EMP',
policy_name => 'SAL_AUDIT');
END;
/
zie ook :
Server Setup
Audit Options
View Audit Trail
Onderhoud en Security