细粒度审计简介
细粒度审计支持粒度是在表级,意味着要在每张表建立适合的策略进行审计。
细粒度审计功能优点:
权限要求:
用户需要拥有对DBMS_FGA包的EXECUTE权限。
创建细粒度审计策略:
DBMS_FGA.ADD_POLICY(
object_schema VARCHAR2,--指定审计对象用户名
object_name VARCHAR2,--指定审计对象
policy_name VARCHAR2,--指定策略名,必须唯一
audit_condition VARCHAR2,--指定审计条件
audit_column VARCHAR2,--指定审计列,NULL代表全部列
enable BOOLEAN,--启用或禁用此策略
statement_types VARCHAR2,--指定要审计的行为:INSERT,UPDATE,DELETE,SELECT,默认是SELECT
audit_trail BINARY_INTEGER IN DEFAULT,--指定审计记录的位置
audit_column_opts BINARY_INTEGER IN DEFAULT);--如果audit_column指定超过一列,使用此参数决定如何生成审计记录。可选项为DBMS_FGA.ANY_COLUMNS和DBMS_FGA.ALL_COLUMNS
注解:DBMS_FGA.ANY_COLUMNS –任一列满足条件就产生审计记录DBMS_FGA.ALL_COLUMNS—所有列都满足条件才生成审计记录
具体测试过程:
创建表TEST_FGA并插入测试数据
create table TEST_FGA
(
x VARCHAR2(20),
y VARCHAR2(20),
z VARCHAR2(20)
);
insert into TEST_FGA values (1,1,1);
insert into TEST_FGA values (2,null,2);
insert into TEST_FGA values (null,3,3);
insert into TEST_FGA values (null,null,4);
commit;
创建自定义函数做IP判断:
create or replace function fun_test_fga
return number
as
v_result number;
begin
select count(SYS_CONTEXT('USERENV', 'IP_ADDRESS')) into v_result from dual where SYS_CONTEXT('USERENV', 'IP_ADDRESS') IN ('192.168.150.1','192.168.150.143');
return v_result;
end fun_test_fga;
基于表TEST_FGA创建细粒度审计策略FIRST_POLICY
EXEC DBMS_FGA.ADD_POLICY(object_schema => 'LPP',object_name => 'TEST_FGA',policy_name => 'FIRST_POLICY',audit_condition => 'FUN_TEST_FGA=0',audit_column => 'x,y',enable => TRUE,statement_types => 'INSERT, UPDATE,DELETE,SELECT',audit_trail => DBMS_FGA.DB +DBMS_FGA.EXTENDED,audit_column_opts => DBMS_FGA.ANY_COLUMNS);