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
-- 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',