Thứ Tư, 19 tháng 10, 2022

Cấu hình FGA với bảng Partition trong Oracle Database

Mục đích: Tạo FGA với bảng partition để dễ dọn dẹp
--0.Check
-- • Kiem tra policy
select * from DBA_AUDIT_POLICIES;
-- • Kiem tra log dã audit
select * from DBA_FGA_AUDIT_TRAIL where  timestamp > sysdate-1  order by timestamp desc;
truncate table sys.fga_log$;

-- 1. Create table to store log:

create tablespace DATA_AUDIT datafile '+DATA' size 1G autoextend on next 100m;
create tablespace INDX_AUDIT datafile '+DATA size 1G autoextend on next 100m;
 
CREATE TABLE SYS.FGA_AUDIT_LOG
(
  FGASID        NUMBER(20),
  ENTRYID       NUMBER(20),
  AUDIT_DATE    DATE,
  FGA_POLICY    VARCHAR2(100 BYTE),
  DB_USER       VARCHAR2(100 BYTE),
  OS_USER       VARCHAR2(200 BYTE),
  AUTHENT_TYPE  VARCHAR2(100 BYTE),
  CLIENT_ID     VARCHAR2(100 BYTE),
  CLIENT_INFO   VARCHAR2(500 BYTE),
  HOST_NAME     VARCHAR2(200 BYTE),
  INSTANCE_ID   NUMBER(2),
  IP            VARCHAR2(50 BYTE),
  TERM          VARCHAR2(100 BYTE),
  SCHEMA_OWNER  VARCHAR2(100 BYTE),
  TABLE_NAME    VARCHAR2(100 BYTE),
  SQL_BIND      VARCHAR2(4000 BYTE),
  SQL_TEXT      VARCHAR2(4000 BYTE),
  SCN           NUMBER(20)
)
NOCOMPRESS 
TABLESPACE data_audit
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            BUFFER_POOL      DEFAULT
           )
PARTITION BY RANGE (AUDIT_DATE)
(  
  PARTITION DATA20220823 VALUES LESS THAN (TO_DATE(' 2022-08-24 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS 
    TABLESPACE data_audit
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          8M
                NEXT             1M
                MAXSIZE          UNLIMITED
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               )
)
NOCACHE
MONITORING;

-- Add partition het nam 2022
DECLARE
   v_nam          NUMBER (4) := 2022;
   v_owner        varchar2 (50) := 'sys';
   v_tablename    VARCHAR2 (50) := 'FGA_AUDIT_LOG';
   v_date_from   date    := to_date('24/08/2022','dd/mm/yyyy');
   v_date_to     date    := to_date('31/12/2022','dd/mm/yyyy');
   v_numday     number(5);
   v_tablespace varchar2(50):='DATA_AUDIT';
BEGIN
   v_numday:=v_date_to-v_date_from; 
   FOR i IN 0 .. v_numday
   LOOP
      DBMS_OUTPUT.put_line ('alter table '||v_owner||'.'|| v_tablename || ' add PARTITION DATA' ||to_char(v_date_from+i,'YYYYMMDD')||' VALUES LESS THAN (TO_DATE('''|| to_char(v_date_from+i+1,'YYYY-MM-DD')||' 00:00:00'',''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE DATA_AUDIT;');
   END LOOP;
END;

create index sys.FGA_AUDIT_LOG on FGA_AUDIT_LOG(DB_USER) tablespace indx_audit  local;
create index sys.FGA_AUDIT_LOG_I2 on FGA_AUDIT_LOG(ip) tablespace indx_audit  local;
 
-2. Create audit procedure
CREATE OR REPLACE PROCEDURE SYS.pr_fga_auditing (p_table_owner IN VARCHAR2,
                                                p_table_name IN VARCHAR2,
                                                p_fga_policy IN VARCHAR2)
IS
   l_fgasid          NUMBER (20);
   l_entryid         NUMBER (20);
   l_term            VARCHAR2 (2000);
   l_db_user         VARCHAR2 (30);
   l_os_user         VARCHAR2 (30);
   l_authent_type    VARCHAR2 (2000);
   l_client_id       VARCHAR2 (100);
   l_client_info     VARCHAR2 (100);
   l_host_name       VARCHAR2 (100);
   l_instance_id NUMBER (2);
   l_ip              VARCHAR2 (30);
   l_sql_text        VARCHAR2 (4000);
   l_sql_bind        VARCHAR2 (4000);
   l_scn             NUMBER;
BEGIN
   l_fgasid := SYS_CONTEXT ('USERENV', 'SESSIONID');
   l_entryid := SYS_CONTEXT ('USERENV', 'ENTRYID');
   l_term := SYS_CONTEXT ('USERENV', 'TERMINAL');
   l_db_user := SYS_CONTEXT ('USERENV', 'SESSION_USER');
   l_os_user := SYS_CONTEXT ('USERENV', 'OS_USER');
   l_authent_type := SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE');
   l_client_id := SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER');
   l_client_info := SYS_CONTEXT ('USERENV', 'CLIENT_INFO');
   l_host_name := SYS_CONTEXT ('USERENV', 'HOST');
   l_instance_id := SYS_CONTEXT ('USERENV', 'INSTANCE');
   l_ip := SYS_CONTEXT ('USERENV', 'IP_ADDRESS');
   l_sql_text := SYS_CONTEXT ('USERENV', 'CURRENT_SQL');
   l_sql_bind := SYS_CONTEXT ('USERENV', 'CURRENT_BIND');
   
   l_scn := SYS.DBMS_FLASHBACK.get_system_change_number;
   INSERT INTO sys.fga_audit_log (fgasid,
                                    entryid,
                                    audit_date,
                                    fga_policy,
                                    db_user,
                                    os_user,
                                    authent_type,
                                    client_id,
                                    client_info,
                                    host_name,
                                    instance_id,
                                    ip,
                                    term,
                                    schema_owner,
                                    table_name,
                                    sql_text,
                                    sql_bind,
                                    scn)
        VALUES (l_fgasid,
                l_entryid,
                SYSDATE,
                p_fga_policy,
                l_db_user,
                l_os_user,
                l_authent_type,
                l_client_id,
                l_client_info,
                l_host_name,
                l_instance_id,
                l_ip,
                l_term,
                p_table_owner,
                p_table_name,
                l_sql_text,
                l_sql_bind,
                l_scn);
END;
/

--3. Create check ip procedure


CREATE OR REPLACE FUNCTION SYS.check_ip_app_srv
return number
is
begin
    if (SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not in ('100.10.18.10','100.10.18.11')
        and SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '100.10.8%' 
        and  SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '100.10.9%' 
        and  SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '100.10.10%' 
        and  SYS_CONTEXT ('USERENV', 'IP_ADDRESS')  not like '100.10.11%' 
        ) then
        return 1;
    else
        return 0;
    end if;
end;
/
 
--4. Add policies:


BEGIN
   DBMS_FGA.add_policy (object_schema => 'APP_OWNER',
                        object_name  => 'CUSTOMER',
                        policy_name => 'FGA_CUSTOMER',
                        audit_condition => 'sys.check_ip_app_srv = 1',
                        statement_types => 'SELECT,INSERT,UPDATE,DELETE',
                        handler_schema => 'sys',
                        handler_module => 'pr_fga_auditing',
                        enable => TRUE);
END;

-- Cao tải thì disable
BEGIN
  DBMS_FGA.disable_policy(
    object_schema   => 'APP_OWNER',
    object_name     => 'CUSTOMER',
    policy_name     => 'FGA_CUSTOMER');
END;
/

-- Enable lai
BEGIN
  DBMS_FGA.enable_policy(
    object_schema   => 'APP_OWNER',
    object_name     => 'CUSTOMER',
    policy_name     => 'FGA_CUSTOMER');
END;
/

-- Drop
BEGIN
  DBMS_FGA.drop_policy(
    object_schema   => 'APP_OWNER',
    object_name     => 'CUSTOMER',
    policy_name     => 'FGA_CUSTOMER');
END;
/

--5.Check

-- • Ki?m tra l?i policy
select * from DBA_AUDIT_POLICIES;
-- • Ki?m tra log dã audit
select * from DBA_FGA_AUDIT_TRAIL where  timestamp > sysdate-1  order by timestamp desc;
--truncate table sys.fga_log$;
select * from SYS.FGA_AUDIT_LOG;

select * from customer where id='10';


--Nếu cần dùng scrip thì tham khảo:
--Script drop 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;

-- Script add policy
select 'BEGIN
  DBMS_FGA.add_policy(object_schema => '''||object_schema||''',
                        object_name  => '''|| object_name|| ''',
                        policy_name => ''' ||policy_name||''',
                        audit_condition => ''sys.check_ip_app_srv = 1'',
                        statement_types => ''SELECT,INSERT,UPDATE,DELETE'',
                        handler_schema => ''sys'',
                        handler_module => ''pr_fga_auditing'',
                        enable =>  ''TRUE''
                        );
END;
'
from DBA_AUDIT_POLICIES;
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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