Thứ Hai, 4 tháng 8, 2025

Data Masking (ẩn/mã hóa dữ liệu nhạy cảm) trong Oracle Database 11g

Trong Oracle 11g, tính năng Data Masking (ẩn/mã hóa dữ liệu nhạy cảm) không có sẵn ở cấp CSDL cơ sở như Oracle 12c trở lên (với Data Redaction), mà phải dùng qua công cụ ngoài hoặc tạo thủ tục thủ công để masking dữ liệu khách hàng.

Dưới đây là giải pháp đầy đủ và từng bước thực hiện thủ tục masking dữ liệu KH trong Oracle 11g:

🎯 MỤC TIÊU

  • Che giấu dữ liệu nhạy cảm (CMND, SDT, Email, Tài khoản…) trong môi trường kiểm thử, báo cáo, hoặc khi cấp quyền cho nhân viên không được phép truy cập thông tin đầy đủ.

  • Dữ liệu có thể được “làm mờ” (masking), ví dụ:

    • Số điện thoại: 09876543210987****21

    • Email: a.binh@example.coma*****@example.com


🧩 GIẢI PHÁP CHO ORACLE 11g

Có 2 hướng giải quyết chính:

Giải phápMô tảKhi dùng
Thủ tục thủ công (PL/SQL Masking Function)Viết hàm để làm mờ dữ liệu và tạo view giới hạnKhi không có Oracle Data Masking Pack
Sử dụng Oracle Data Masking Pack (thuộc Oracle Enterprise Manager)Mask dữ liệu gốc trên bản sao DB (non-prod)Khi có bản quyền Oracle EM + Data Masking Pack

🛠️ I. CÁCH 1 – MASKING THỦ CÔNG BẰNG PL/SQL FUNCTION + VIEW (Đề xuất cho Oracle 11g)


🧱 Bước 1: Tạo hàm masking dữ liệu

sql
CREATE OR REPLACE FUNCTION MASK_SDT(p_sdt VARCHAR2) RETURN VARCHAR2 IS BEGIN IF LENGTH(p_sdt) >= 10 THEN RETURN SUBSTR(p_sdt, 1, 4) || '****' || SUBSTR(p_sdt, -2); ELSE RETURN '***MASKED***'; END IF; END; /

Tương tự, tạo hàm mask email:

sql
CREATE OR REPLACE FUNCTION MASK_EMAIL(p_email VARCHAR2) RETURN VARCHAR2 IS v_pos NUMBER; BEGIN v_pos := INSTR(p_email, '@'); IF v_pos > 1 THEN RETURN SUBSTR(p_email, 1, 1) || '*****' || SUBSTR(p_email, v_pos); ELSE RETURN '***MASKED***'; END IF; END; /

🧱 Bước 2: Tạo View chứa dữ liệu đã masking

Giả sử bảng gốc là KHACH_HANG với các cột:

sql
ID, TEN_KH, SDT, EMAIL, CCCD, NGAY_SINH

Tạo view:

sql
CREATE OR REPLACE VIEW V_KHACH_HANG_MASKED AS SELECT ID, TEN_KH, MASK_SDT(SDT) AS SDT, MASK_EMAIL(EMAIL) AS EMAIL, '************' AS CCCD, TO_CHAR(NGAY_SINH, 'DD/MM/YYYY') AS NGAY_SINH FROM KHACH_HANG;

🧱 Bước 3: Cấp quyền cho người dùng chỉ truy cập view đã mask

sql
GRANT SELECT ON V_KHACH_HANG_MASKED TO USER_NHANVIEN;

✅ Kết quả đầu ra

IDTEN_KHSDTEMAILCCCD
1Lê Văn An0987****21l*****@gmail.com************
2Trần Bình0912****78t*****@mb.vn************

🧰 II. CÁCH 2 – DÙNG ORACLE DATA MASKING PACK (CẦN LICENSE EM)

Chỉ áp dụng khi bạn có Oracle Enterprise Manager + license Data Masking Pack.

Các bước:

  1. Tạo bản sao database (duplicate database) sang môi trường dev/test.

  2. Trong EM (Oracle Enterprise Manager):

    • Vào mục Masking Definition.

    • Chọn các bảng nhạy cảm.

    • Chọn kỹ thuật masking (Random, Substitution, Shuffling...).

    • Chạy job Data Masking trực tiếp.

  3. Sau khi masking, export data (Data Pump) từ DB test.

  4. Import dữ liệu đã masking vào môi trường dev hoặc demo.

✅ Đây là cách phù hợp khi cần mask dữ liệu trên môi trường non-prod để đảm bảo dữ liệu test không lộ thông tin khách hàng.

Chi tiết các bước:

Dưới đây là ví dụ cụ thể và chi tiết từng bước triển khai Cách 2 – dùng Oracle Data Masking Pack thông qua Oracle Enterprise Manager (EM) để masking dữ liệu khách hàng trong môi trường kiểm thử, giả lập hoặc báo cáo nội bộ.


🧩 KỊCH BẢN MÔ PHỎNG

Bạn là quản trị hệ thống của nhà mạng. CSDL sản xuất PROD_KH chứa bảng KHACH_HANG, gồm các thông tin nhạy cảm: số điện thoại (SDT), email, CMND, địa chỉ...

Bạn cần tạo bản bản sao DB masking để cấp cho nhóm phát triển ứng dụng nhưng không được lộ dữ liệu thật của khách hàng.


🛠️ CÁC BƯỚC THỰC HIỆN (Oracle Data Masking Pack)


🔹 Bước 1: Tạo bản sao dữ liệu từ Production

Dùng RMAN hoặc Data Pump để clone từ PROD:

bash
# Clone full DB để test rman target / RMAN> DUPLICATE DATABASE TO DEV_KH FROM ACTIVE DATABASE SPFILE SET DB_NAME='DEV_KH' SET DB_UNIQUE_NAME='DEV_KH';

Hoặc dùng Oracle Cloud Control (EM) chọn:

Targets > Databases > PROD_KH > Schema > Clone to Test Database


🔹 Bước 2: Đăng nhập Oracle Enterprise Manager (Cloud Control)

  1. Vào giao diện Oracle EM (thường là https://<host>:7799/em)

  2. Chọn Database DEV_KH

  3. Vào menu:

    mathematica
    Schema > Data Masking and Subsetting > Masking Definitions

🔹 Bước 3: Tạo Masking Definition

  1. Chọn bảng cần masking:

    • Bảng KHACH_HANG

    • Cột cần masking: SDT, EMAIL, CMND, DIACHI

  2. Chọn kiểu masking cho từng cột:

CộtKỹ thuật maskingGiải thích
SDTPartial MaskingHiển thị 4 số đầu + 2 số cuối (vd: 0987****65)
EMAILCustom ScramblingLàm mờ phần local, giữ tên miền
CMNDRandom DigitsSinh số CMND ngẫu nhiên cùng định dạng
DIACHINullingGán giá trị NULL hoặc 'Ẩn vì bảo mật'
  1. Xác nhận & lưu định nghĩa masking


🔹 Bước 4: Chạy job masking

Trong giao diện EM:

  • Vào menu:

    mathematica
    Schema > Data Masking and Subsetting > Run Masking Job
  • Chọn DB đích: DEV_KH

  • Chọn Masking Definition vừa tạo

  • Lập lịch chạy hoặc chạy ngay


🔹 Bước 5: Kiểm tra dữ liệu sau khi masking

sql
SELECT TEN_KH, SDT, EMAIL, CMND, DIACHI FROM KHACH_HANG; -- Output sau khi masking: +------------+-------------+-------------------+------------+------------------------+ | Lê Văn An | 0987****65 | l*****@gmail.com | 0123456789 | Ẩn vì bảo mật | | Nguyễn Hoa | 0912****78 | n*****@mobi.vn | 8765432190 | Ẩn vì bảo mật | +------------+-------------+-------------------+------------+------------------------+

🔹 Bước 6: Export dữ liệu DEV đã masking

Sử dụng Data Pump:

bash
expdp dev_user/password@DEV_KH schemas=DEV_USER directory=DATA_PUMP_DIR dumpfile=khachhang_masked.dmp logfile=export.log

Kết quả: bạn có file khachhang_masked.dmp không chứa dữ liệu thật – an toàn để cấp cho dev, test, hoặc đối tác.


✅ ƯU ĐIỂM CỦA CÁCH 2

  • Dữ liệu gốc vẫn giữ nguyên trong PROD

  • Masking thực hiện trên bản sao – không ảnh hưởng hệ thống vận hành

  • Đáp ứng tuân thủ bảo mật: GDPR, Nghị định 13, ISO/IEC 27001

  • Masking có thể tự động hóa, lập lịch định kỳ

  • Kết quả đầu ra rõ ràng, dễ kiểm tra, có báo cáo từ Oracle EM


⚠️ LƯU Ý

  • Phải có Oracle Enterprise Manager + license Data Masking Pack

  • Cần chuẩn bị trước các định nghĩa masking phù hợp từng cột

  • Không phù hợp để masking trực tiếp môi trường PROD – chỉ nên dùng cho bản clone


✅ KẾT LUẬN

Tình huốngGiải pháp nên chọn
Chỉ dùng Oracle 11g, không có bản quyền EMViết thủ tục PL/SQL + view masking
Có license Oracle Data Masking PackDùng Oracle Enterprise Manager để masking bản sao DB
Cần masking + giám sát truy cập + auditKết hợp masking + audit + RBAC + view bảo mật
Cần masking tự động hóa nâng caoXem xét dùng bên thứ ba như Thales CipherTrust, Informatica
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- 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
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 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: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Đị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

=============================
AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, 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,sql tutorial, khóa học pl/sql tutorial, 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 RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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