Thứ Năm, 30 tháng 8, 2018

Cấu hình audit FGA trên Oracle database

Mục đích: Với DB lớn, chưa được trang bị giải pháp chuyên dụng như Imeprva, Oracle Database Fiewall and Audit Vault thì làm thế nào chúng ta có thể audit được các tác động của người dùng truy cập trái phép mà ít ảnh hưởng đến performance của database. Giải pháp là sử dụng FGA của Oracle. Chi tiết thủ tục như bên dưới:



/***** 1.CHECK *****/

-- Policy da duoc cau hinh
select * from DBA_AUDIT_POLICIES;

-- Check log da audit (bang sys.fga_log$)
--truncate table fga_log$;

select * from dba_fga_audit_trail where db_user='USER1' and  timestamp > sysdate-1 order by timestamp desc;;

select * from sys.fga_log$ where  ntimestamp# > sysdate-1 order by ntimestamp# desc;

--select * from DBA_COMMON_AUDIT_TRAIL where db_user='USER1';

SQL> show parameter audit;

NAME                                 TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
audit_file_dest                      string
/oracle/base/admin/fpdb/adump
audit_sys_operations                 boolean
FALSE
audit_syslog_level                   string

audit_trail                          string
DB

/***** 2.DISABLE *****/

BEGIN
  DBMS_FGA.disable_policy(
    object_schema   => 'TEST1_OWNER',
    object_name     => 'TABLE1_GRANTED',
    policy_name     => 'FGA_TABLE1');
END;
/



/***** 3.ADD *****/

BEGIN
  DBMS_FGA.add_policy(

    object_schema   => 'TEST1_OWNER',
    object_name     => 'TABLE1_GRANTED',
    policy_name     => 'FGA_TABLE1',
    AUDIT_CONDITION => 'SYS.check_ip_machine = 1',
    --audit_condition => SYS_CONTEXT('USERENV','SESSION_USER') <> 'TEST2',
    statement_types => 'SELECT, INSERT,UPDATE,DELETE'
    );
END;
/


/***** 4.ROLLBACK *****/

-- Disable
BEGIN
  DBMS_FGA.disable_policy(
    object_schema   => 'TEST1_OWNER',
    object_name     => 'TABLE1_GRANTED',
    policy_name     => 'FGA_TABLE1');
END;
/


-- Drop
BEGIN
  DBMS_FGA.drop_policy(
    object_schema   => 'TEST1_OWNER',
    object_name     => 'TABLE1_GRANTED',
    policy_name     => 'FGA_TABLE1';
END;
/

-- Script disable all policy
select 'BEGIN
  DBMS_FGA.disable_policy(object_schema => '''||object_schema||''',
                        object_name  => '''|| object_name|| ''',
                        policy_name => ''' ||policy_name||''');
END;
'
 from DBA_AUDIT_POLICIES;

-- Script disable all policy
select 'BEGIN
  DBMS_FGA.drop_policy(object_schema => '''||object_schema||''',
                        object_name  => '''|| object_name|| ''',
                        policy_name => ''' ||policy_name||''');
END;
'
 from DBA_AUDIT_POLICIES;

Kết quả audit:

Thủ tục check_IP


CREATE OR REPLACE FUNCTION SYS.CHECK_IP_MACHINE
return number RESULT_CACHE
is
begin

    if (SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.8.%' and 
        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.9.%' and 
        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.10.%' and 
        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.11.%'  and 
        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.12.%' and 
        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.13.%' and 
        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '10.10.14.%') then
            return 1;
    else
            return 0;
    end if;
    
    --    if (SYS_CONTEXT('USERENV', 'SESSION_USER') <> 'BINHTV'
--         and (SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  like '10.20.20.%' or SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  like '10.30.30%'
--        )) then

--    if (SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  like '10.20.20%' or
--        SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  like '10.20.30%'
--        ) then
--        return 1;
--    else
--        return 0;
--    end if;
--    
end;

    --audit_condition => SYS_CONTEXT('USERENV','SESSION_USER') <> 'APP_OWNER',

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master