oracle10g 细粒审计
oracle10g 细粒审计
自己试验成功的例子:
sqlplus /nolog
conn /as sysdba
begin
dbms_fga.add_policy (
object_schema=>'system', ####方案名
object_name=>'nbstutb', ####表名
policy_name=>'nbstu', ####自定义的策略名
statement_types=> 'SELECT,DELETE,INSERT,UPDATE'
);
end;
/
清除试验数据:清除细粒审计的审计记录:
sqlplus /nolog
conn /as sysdba
delete sys.fga_log$;
commit;
ORACLE 10g细粒度审计
ORACLE 10g在细粒度审计(FGA)方面有了很大的扩展。9i的细粒度审计只支持SELECT语句,而10g提供了对DML的支持(支持Insert、Update和Delete,Merge不是一个独立的DML语句)。
10g的细粒度审计不仅仅能够对一个相关字段进行审计,可以对多个字段进行审计。在audit_column_opts中可以设置dbms_fga.all_columns或者dbms_fga.any_columns。
审计日志可以把SQL文本和绑定变量写入LOB字段。如果审计的开销过大,可以关闭写入LOB的信息。
以下是一个10G DBMS_FGA.ADD_POLICY的例子,可以看出和9i的细粒度审计有很大的不同:
dbms_fga.add_policy ( object_schema => 'PIET', object_name => 'EMP',
policy_name => 'MYPOLICY1', audit_condition => NULL,
audit_column => 'SALARY,COMMISSION_PCT',
audit_column_opts => DBMS_FGA.ALL_COLUMNS,
audit_trail => DBMS_FGA.DB_EXTENDED,
statement_types => 'INSERT, UPDATE');
下面一个例子演示了对INSERT的审计过程:
SQL> connect piet/piet
Connected.
SQL> CREATE TABLE EMP (
EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4) CONSTRAINT EMP_SELF_KEY REFERENCES EMP (EMPNO),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) NOT NULL,
CONSTRAINT EMP_PRIMARY_KEY PRIMARY KEY (EMPNO));
Table created.
SQL> INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,'17-NOV-81',5000,NU;
1 row created.
SQL> grant all on emp to miller;
Grant succeeded.
SQL> conn system/manager
SQL> execute sys.DBMS_FGA.ADD_POLICY(-
object_schema => 'PIET', -
object_name => 'EMP', -
policy_name => 'mypolicy1', -
audit_condition => 'sal < 1000', -
audit_column => 'comm', -
enable => TRUE, -
statement_types => 'INSERT');
PL/SQL procedure successful
ly completed.
SQL> select * from DBA_AUDIT_POLICY_COLUMNS ;
OBJECT_SCHEMA OBJECT_NAME