Thứ Năm, 19 tháng 8, 2021

Bảo mật (Audit trail, FGA) trong Oracle Database 10g, 11g, 12c, 19c

Mục đích: Trong bài viết này tôi sẽ chia sẻ 1 số nội dung về bảo mật trong Oracle Database 10g, 11g, 12c, 19c

Nội dung:
  • Virtual Private Database (VPD) 
    • Chính sách VPD mức cột 
    • Column Masking
  • FGA (Fine-Grained Auditing)
  • Uniform Audit Trail
  • Nội dung Audit Trail  gồm những gì?
  • DBMS_CRYPTO

Virtual Private Database (VPD) 

Chính sách VPD mức cột 

Chính sách VPD được áp dụng cho toàn bộ row. Theo mặc định, Chính sách VPD ở mức cột cho phép bạn hạn chế các row được hiển thị chỉ khi các cột được chỉ định được truy cập.

CONN sys/password@db10g AS SYSDBA
GRANT EXECUTE ON dbms_rls TO scott;

CONN scott/tiger@db10g

-- Tạo hàm với các polcy để hạn chế quyền truy cập vào các cột SAL và COMM
-- nếu nhân viên không thuộc deptno=20.
CREATE OR REPLACE FUNCTION pf_job (oowner IN VARCHAR2, ojname IN VARCHAR2)
RETURN VARCHAR2 AS
  con VARCHAR2 (200);
BEGIN
  con := 'deptno = 20';
  RETURN (con);
END pf_job;
/

-- Áp các policy cho bảng.
BEGIN
  DBMS_RLS.ADD_POLICY (object_schema     => 'scott',
                       object_name       => 'emp',
                       policy_name       => 'sp_job',
                       function_schema   => 'scott',
                       policy_function   => 'pf_job',
                       sec_relevant_cols => 'sal,comm');
END;
/

-- Chúng ta sẽ xem được tất cả các bản ghi nếu deptno khác 20, nhưng SAL, COMM không hiển thị
SELECT empno, ename, job FROM emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK . . 7934 MILLER CLERK 14 rows selected. -- Các row hiển thị thêm thông tin SAL, COMM nếu deptno = 20
SELECT empno, ename, job, sal, comm FROM emp; EMPNO ENAME JOB SAL COMM ---------- ---------- --------- ---------- ---------- 7369 SMITH CLERK 10000 7566 JONES MANAGER 2975 7788 SCOTT ANALYST 3000 7876 ADAMS CLERK 1100 7902 FORD ANALYST 3000 5 rows selected. -- Bỏ policy ra khỏi bảng. BEGIN DBMS_RLS.DROP_POLICY (object_schema => 'scott', object_name => 'emp', policy_name => 'sp_job'); END; /

Column Masking

-- Tạo policy
BEGIN
  DBMS_RLS.ADD_POLICY (object_schema         => 'scott',
                       object_name           => 'emp',
                       policy_name           => 'sp_job',
                       function_schema       => 'scott',
                       policy_function       => 'pf_job',
                       sec_relevant_cols     => 'sal,comm',
                       sec_relevant_cols_opt => DBMS_RLS.ALL_ROWS);
END;
/

-- Tất cả các row được trả về với SAL và COMM là NULL nhưng nếu deptno=20 sẽ hiển thị giá trị SAL và COMM
SELECT empno, ename, job, sal, comm FROM emp;

     EMPNO ENAME      JOB              SAL       COMM
---------- ---------- --------- ---------- ----------
      7369 SMITH      CLERK          10000
      7499 ALLEN      SALESMAN
      7521 WARD       SALESMAN
      7566 JONES      MANAGER         2975
      7654 MARTIN     SALESMAN
      7698 BLAKE      MANAGER
      7782 CLARK      MANAGER
      7788 SCOTT      ANALYST         3000
      7839 KING       PRESIDENT
      7844 TURNER     SALESMAN
      7876 ADAMS      CLERK           1100

     EMPNO ENAME      JOB              SAL       COMM
---------- ---------- --------- ---------- ----------
      7900 JAMES      CLERK
      7902 FORD       ANALYST         3000
      7934 MILLER     CLERK

14 rows selected.

-- Xóa policy
BEGIN
  DBMS_RLS.DROP_POLICY (object_schema     => 'scott',
                        object_name       => 'emp',
                        policy_name       => 'sp_job');
END;
/

FGA (Fine-Grained Auditing)

Khi bật audit_trail mà gây cao tải thì có thể dùng giải pháp FGA (Fine-grained auditing) để audit các câu lệnh SELECT và  DML 

-- Xóa fga log
CONN sys/password@db10g AS SYSDBA
TRUNCATE TABLE fga_log$;
SELECT sql_text FROM dba_fga_audit_trail;

no rows selected.

-- Tạo policy giám sát SELECT,INSERT,UPDATE,DELETE trên cột SAL của EMP 
BEGIN
  DBMS_FGA.add_policy(
    object_schema   => 'SCOTT',
    object_name     => 'EMP',
    policy_name     => 'SAL_AUDIT',
    audit_condition => NULL, -- Tương đương với TRUE
    audit_column    => 'SAL',
    statement_types => 'SELECT,INSERT,UPDATE,DELETE');
END;
/

-- Test audit
CONN scott/tiger@db10g
SELECT * FROM emp;
INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Tim', 1);
UPDATE emp SET sal = 10 WHERE empno = 9999;
DELETE emp WHERE empno = 9999;
ROLLBACK;

-- Kiểm tra audit trail.
SELECT sql_text FROM dba_fga_audit_trail;

SQL_TEXT
--------------------------------------
SELECT * FROM emp
INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Binh', 1)
UPDATE emp SET sal = 10 WHERE empno = 9999
DELETE emp WHERE empno = 9999

4 rows selected.

-- Xóa policy.
CONN sys/password@db10g AS SYSDBA
BEGIN
  DBMS_FGA.drop_policy(
    object_schema   => 'SCOTT',
    object_name     => 'EMP',
    policy_name     => 'SAL_AUDIT');
END;
/

Uniform Audit Trail (hay còn gọi là Audit Trail)

View DBA_COMMON_AUDIT_TRAIL view hiển thị hết cả FGA và Audit Trail:

  • DBA_AUDIT_TRAIL - Chỉ hiển thị audit chuẩn là audit trail (từ AUD$).
  • DBA_FGA_AUDIT_TRAIL - Hiển thị audit FGA (từ FGA_LOG$).
  • DBA_COMMON_AUDIT_TRAIL - HIển thị cả audit trail và FGA 

Audit Trail chứa những nội dung gì?

Several fields have been added to both the standard and fine-grained audit trails.

  • EXTENDED_TIMESTAMP - Chi tiết hơn của cột TIMESTAMP 
  • PROXY_SESSIONID - Proxy session serial number  
  • GLOBAL_UID - Global Universal Identifier của UID
  • INSTANCE_NUMBER - Instance ID  
  • OS_PROCESS - PID mức OS của câu lệnh bị audit
  • TRANSACTIONID - Transaction identifier for the audited transaction. This column can be used to join to the XID column on the FLASHBACK_TRANSACTION_QUERY view.
  • SCN - System change number 
  • SQL_BIND - Giá trị tương ứng với câu lệnh SQL_TEXT 
  • SQL_TEXT - Câu lệnh SQL được audit

Khi thay đổi tham số AUDIT_TRAIL=DB_EXTENDED thì Cột SQL_BIND sẽ hiển thị chi tiết giá trị từ  câu lệnh SQL_TEXT, việc thay đổi tham số này phải restart lại instance:

-- Cấu hình audit db_extend để hiển thị chi tiết câu lệnh SQL có cả giá trị
CONN sys/password AS SYSDBA
ALTER SYSTEM SET audit_trail=db_extended SCOPE=SPFILE;
SHUTDOWN IMMEDIATE
STARTUP
TRUNCATE TABLE aud$;
TRUNCATE TABLE fga_log$;
AUDIT ALL BY scott BY ACCESS;

-- Thực hiện audit
CONN scott/tiger
UPDATE emp SET ename = ename;

-- Kiểm tra audit trail.
SELECT sql_text FROM dba_common_audit_trail;

SQL_TEXT
----------------------------
UPDATE emp SET ename = ename

1 row selected.

-- Bỏ audit trail
CONN sys/password AS SYSDBA
ALTER SYSTEM SET audit_trail=none SCOPE=SPFILE;
SHUTDOWN IMMEDIATE
STARTUP
TRUNCATE TABLE aud$;
TRUNCATE TABLE fga_log$;

DBMS_CRYPTO

Gói DBMS_CRYPTO packagetahy thế gói DBMS_OBFUSCATION_TOOLKIT từ Oracle 8i và 9i. Gói này chứa nhiều thuật toán mã hóa:

  • Thuật toán mã hóa - DES, 3DES, AES, RC4, 3DES_2KEY
  • Dạng dịch bit - PKCS5, zeroes
  • Các chế độ chuỗi mã hóa - CBC, CFB, ECB, OFB
  • Thuật toán băm - MD5, SHA-1, MD4
  • Thuật toán băm MAC  - HMAC_MD5, HMAC_SH1
  • Tạo số mã hóa ngẫu nhiên - RAW, NUMBER, BINARY_INTEGER
  • Hỗ trợ các kiểu dữ liệu - RAW, CLOB, BLOB

1 ví dụ đơn giản như sau:

SET SERVEROUTPUT ON
DECLARE
  l_credit_card_no    VARCHAR2(19) := '1234 5678 9012 3456';
  l_ccn_raw           RAW(128) := UTL_RAW.cast_to_raw(l_credit_card_no);
  l_key               RAW(128) := UTL_RAW.cast_to_raw('abcdefgh');

  l_encrypted_raw     RAW(2048);
  l_decrypted_raw     RAW(2048);
BEGIN
  DBMS_OUTPUT.put_line('Original  : ' || l_credit_card_no);

  l_encrypted_raw := DBMS_CRYPTO.encrypt(src => l_ccn_raw, 
                                         typ => DBMS_CRYPTO.des_cbc_pkcs5, 
                                         key => l_key);

  DBMS_OUTPUT.put_line('Encrypted : ' || RAWTOHEX(UTL_RAW.cast_to_raw(l_encrypted_raw)));

  l_decrypted_raw := DBMS_CRYPTO.decrypt(src => l_encrypted_raw, 
                                         typ => DBMS_CRYPTO.des_cbc_pkcs5, 
                                         key => l_key);

  DBMS_OUTPUT.put_line('Decrypted : ' || UTL_RAW.cast_to_varchar2(l_decrypted_raw));
END;
/
Original  : 1234 5678 9012 3456
Encrypted : 3041423134363932354234374545463631304337384433354443433736323331354244454237324635314545
Decrypted : 1234 5678 9012 3456

PL/SQL procedure successfully completed.
Đọc thêm: 
=============================
* 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
hoặc
https://bit.ly/oaz_fp
=============================
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 dataguard, oracle goldengate, oracle weblogic, oracle exadata, hoc solaris, hoc linux, hoc aix

ĐỌC NHIỀU

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