FGA从oracle 9i开始引入,FGA不但对行和列精细化审计,而且还记录触发审计的语句通过调用DBMS_FGA包来实现FGA,将需要审计的数据内容作为一个策略,在数据库里面进行定义。审计信息记录在数据字典表fga_log$里面,通过查询视图dba_fga_audit_trail可以获得FGA的审计数据。
基于行的审计:
开启对scott用户下aud_test表中empno为7839行操作是update或者select的审计
1 begin
2 dbms_fga.add_policy(
3 object_schema => 'SCOTT',
4 object_name => 'AUD_TEST',
5 policy_name => 'AUDIT_TEST',
6 audit_condition => 'EMPNO=7839',
7 enable => true,
8 statement_types => 'SELECT,UPDATE'
9 );
10* end;
SQL> /
PL/SQL procedure successfully completed.
scott用户登入执行select和update操作:
SQL> conn scott/oracle
Connected.
SQL> select * from aud_test where empno=7839;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7839 KING PRESIDENT 17-NOV-81 6000 10
SQL> update aud_test
2 set sal=sal+1000
3 where empno=7839;
1 row updated.
SQL> commit;
Commit complete.
sys用户查看审计结果
SQL> conn / as sysdba
Connected.
SQL> select timestamp,db_user,os_user,object_schema,sql_text from dba_fga_audit_trail;
TIMESTAMP DB_USER OS_USER OBJECT_SCHEMA SQL_TEXT
--------- ---------- ---------- ---------------- ----------------------------------------
12-MAY-14 SCOTT oracle SCOTT select * from aud_test where empno=7839
12-MAY-14 SCOTT oracle SCOTT update aud_test
set sal=sal+1000
where empno=7839
基于列的审计:
审计对aud_test表中scott.sal列的select操作:
1 begin
2 dbms_fga.add_policy(
3 object_schema => 'SCOTT',
4 object_name => 'aud_test',
5 policy_name => 'aud_col',
6 audit_column => 'SAL',
7 enable => true,
8 statement_types => 'SELECT'
9 );
10* end;
SQL> /
PL/SQL procedure successfully completed.
SQL> truncate table fga_log$;
Table truncated.
SQL> conn scott/oracle
Connected.
SQL> select sal from aud_test;
SAL
----------
800
1600
1250
2975
1250
2850
2450
3000
7000
1500
1100
SQL> conn / as sysdba
Connected.
SQL> select timestamp,db_user,os_user,object_schema,sql_text from dba_fga_audit_trail;
TIMESTAMP DB_USER OS_USER OBJECT_SCHEMA SQL_TEXT
--------- ---------- ---------- ---------------- ----------------------------------------
12-MAY-14 SCOTT oracle SCOTT select sal from aud_test
12-MAY-14 SCOTT oracle SCOTT select sal from aud_test
由于行审计audit_test未删除或关闭,因此此处查询sal时显示的有empno=7839的行的信息,触发了audit_test,所以产生了两条审计记录。
删除fga:
SQL> select pname from fga$;
PNAME
------------------------------
AUDIT_TEST
AUD_COL
SQL> begin
2 dbms_fga.drop_policy('scott','aud_test','audit_test');
3 end;
4 /
SQL> begin
2 dbms_fga.drop_policy('scott','aud_test','aud_col');
3 end;
4 /
SQL> select pname from fga$;
no rows selected
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29320885/viewspace-1158918/ ,如需转载,请注明出处,否则将追究法律责任。