Oracle的标准审计默认级别是DB,这个级别不会记下具体sql语句是什么,如果需要记下需要开到DB,extended,但是改这个参数需要重启数据库生效,影响业务。
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
可以用细粒度审计来完成这个需求。启用细粒度审计只需要设置DBMS_FGA.ADD_POLICY存储过程,AUDIT_TRAIL使用默认值即可。
以下是一个简单的审计指定表增删改操作
BEGIN
DBMS_FGA.ADD_POLICY(OBJECT_SCHEMA => 'TEST',
OBJECT_NAME => 'TEST_INDEX',
POLICY_NAME => 'TEST_INDEX_POL',
ENABLE => TRUE,
STATEMENT_TYPES => 'INSERT,UPDATE,DELETE'); -- 可选增删改查操作,不指定则全部审计
END;
/
查询审计策略
SELECT * FROM dba_audit_policies;
SELECT * FROM dba_audit_policy_columns;
查询审计结果
select d.timestamp,d.db_user,d.os_user,d.userhost,d.object_schema,d.object_name,d.sql_text,d.sql_bind from dba_fga_audit_trail d
--where d.statement_type<>'SELECT'
order by 1
清空细粒度审计记录
truncate table sys.fga_log$;
细粒度审计可以指定很多复杂的规则,例如指定列和条件:
begin
dbms_fga.add_policy(
object_schema=>'HR',
object_name=>'EMPLOYEES',
policy_name=>'AUDI_SAL_EMP ',
audit_condition=>'salary is not null and commission_pct is not null', -- -- 指定审计条件
audit_column=>'salary,commission_pct', -- 指定列
enable=>true,
statement_types=>'select'); -- 审计类型
end;
/
ADD_POLICY Procedure
begin
DBMS_FGA.ADD_POLICY(
object_schema IN VARCHAR2 DEFAULT NULL,
object_name IN VARCHAR2,
policy_name IN VARCHAR2,
audit_condition IN VARCHAR2 DEFAULT NULL,
audit_column IN VARCHAR2 DEFAULT NULL,
handler_schema IN VARCHAR2 DEFAULT NULL,
handler_module IN VARCHAR2 DEFAULT NULL,
enable IN BOOLEAN DEFAULT TRUE,
statement_types IN VARCHAR2 DEFAULT SELECT,
audit_trail IN BINARY_INTEGER DEFAULT NULL,
audit_column_opts IN BINARY_INTEGER DEFAULT ANY_COLUMNS,
policy_owner IN VARCHAR2 DEFAULT NULL);
end;
/
例如
DBMS_FGA.ADD_POLICY (
object_schema => 'scott',
object_name => 'emp',
policy_name => 'mypolicy1',
audit_condition => 'sal < 100',
audit_column => 'comm,sal',
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => 'INSERT, UPDATE',
audit_column_opts => DBMS_FGA.ANY_COLUMNS,
policy_owner => 'sec_admin);
DISABLE_POLICY Procedure
begin
DBMS_FGA.DISABLE_POLICY (
object_schema => 'scott',
object_name => 'emp',
policy_name => 'mypolicy1');
end;
/
DROP_POLICY Procedure
begin
DBMS_FGA.DROP_POLICY (
object_schema => 'scott',
object_name => 'emp',
policy_name => 'mypolicy1');
end;
/
ENABLE_POLICY Procedure
begin
DBMS_FGA.ENABLE_POLICY (
object_schema => 'scott',
object_name => 'emp',
policy_name => 'mypolicy1',
enable => TRUE);
end;
/
具体含义参考
常用视图
- SYS.FGA_LOG$:基表。如果audit_trail参数包含DB,审计记录会被记录在FGA_LOG$表中。
- V$XML_AUDIT_TRAIL:如果audit_trail参数包含XML,审计记录会记录在AUDIT_FILE_DEST初始化参数指定的目的地下的XML文件中,Oracle会读取这些XML文件,生成V$XML_AUDIT_TRAIL动态性能视图,方便DBA查看审计详细信息。
- DBA_AUDIT_POLICIES:详细记录了审计配置的策略信息。
- DBA_FGA_AUDIT_TRAIL:查看到审计的SQL语句和绑定变量。
- DBA_COMMON_AUDIT_TRAIL:包含V$XML_AUDIT_TRAIL动态性能视图的内容,是标准和细粒度审计记录。