TỰ ĐỘNG KHÁM PHÁ, PHÂN LOẠI VÀ GIÁM SÁT DỮ LIỆU NHẠY CẢM TRÊN ORACLE DATABASE VÀ MICROSOFT SQL SERVER
1. Mục tiêu
- Tự động phát hiện các CSDL Oracle và SQL Server đang hoạt động trong hệ thống.
- Tự động quét và phân loại dữ liệu nhạy cảm (PCI, PII theo đặc thù Việt Nam) trên cả hai loại CSDL.
- Tự động cập nhật kết quả phân loại vào group và quét lại theo lịch.
- Giám sát mọi truy cập vào dữ liệu đã phân loại: ghi log chi tiết, cảnh báo khi người dùng không được phép truy cập.
- Trực quan hóa kết quả bằng báo cáo và dashboard.
2. Nguyên lý hoạt động
Quy trình gồm ba giai đoạn, nối với nhau qua group:Giai đoạn | Cơ chế | Kết quả |
Khám phá CSDL | S-TAP dò instance trên máy đã cài S-TAP; Auto-discovery quét IP và cổng nên thấy cả CSDL chưa được giám sát | Danh sách instance, báo cáo và dashboard |
Phân loại dữ liệu | Guardium đăng nhập CSDL qua datasource, lấy mẫu dữ liệu và so khớp với rule (regex, tên cột) | Bảng, cột nhạy cảm được tự động thêm vào group; quét lại theo lịch |
Giám sát truy cập | Security policy trên Collector dùng chính các group đó để đánh giá traffic S-TAP gửi về | Log chi tiết; cảnh báo khi người dùng ngoài danh sách được phép truy cập |
Hình 1: Nguyên lý hoạt động: khám phá CSDL, phân loại dữ liệu và giám sát truy cập
3. Mô hình triển khai và chuẩn bị
3.1. Thành phần hệ thống
Thành phần | Tên máy / IP | Chức năng |
Guardium Collector (đồng thời là Central Manager) | <IP_GUARDIUM> | Thu thập, phân tích, lưu nhật ký; chạy phân loại; cài policy |
Oracle Database 19c trên Oracle Linux (non-CDB, service orcl) | oracledb01 / <IP_ORACLE> | CSDL nguồn, đã cài GIM và S-TAP |
Microsoft SQL Server trên Windows Server | SQLDB01 / <IP_MSSQL> | CSDL nguồn, đã cài GIM và S-TAP cho Windows |
Máy chạy kịch bản kiểm thử | oracledb01, SQLDB01 | sqlplus trên oracledb01, sqlcmd trong PowerShell trên SQLDB01; luôn kết nối qua TCP |
3.2. Dữ liệu và tài khoản kiểm thử
Schema RETAIL trên Oracle và database RetailDB (schema retail) trên SQL Server có cùng 4 bảng: CUSTOMERS (60 dòng) và EMPLOYEES (20 dòng) chứa số thẻ, CCCD, số điện thoại, email, lương; ORDERS (150 dòng) và PRODUCTS (20 dòng) là bảng đối chứng không nhạy cảm.Tài khoản CSDL | Vai trò |
GUARDIUM_CLS | Guardium dùng để quét phân loại, chỉ có quyền đọc |
RETAIL (Oracle), RETAIL_APP (SQL Server) | Ứng dụng, được phép truy cập dữ liệu nhạy cảm |
INTERN_TEST | Người dùng không được phép theo nghiệp vụ, vẫn được cấp SELECT để sinh truy cập kiểm thử |
SQL Server bật chế độ SQL Server and Windows Authentication, bật giao thức TCP/IP và mở cổng 1433 trên firewall.
3.3. Tạo các group
Truy cập Setup → Tools and Views → Group Builder, nhấn New và tạo ba group, Application type = Public để dùng chung cho Classifier, Policy Builder và Query-Report Builder:Tên group | Group Type | Thành viên |
GRP_SENSITIVE_COLUMNS | Object/Field | Để trống, classification tự thêm cặp bảng + cột nhạy cảm |
GRP_SENSITIVE_OBJECTS | OBJECTS | Để trống, classification tự thêm tên bảng nhạy cảm |
GRP_AUTHORIZED_USERS | USERS | Nhập tay RETAIL, RETAIL_APP, GUARDIUM_CLS |
- Guardium chuẩn hóa tên user thành chữ hoa nên không cần nhập thêm dạng chữ thường.
Hình 2: Ba group trong Group Builder trước khi phân loại
3.4. Khai báo datasource
Bước 1: Truy cập Setup → Tools and Views → Datasource Definitions, chọn Application Type = Classifier, nhấn New và nhập:Trường | Oracle | SQL Server |
Name | DS_ORA_ORACLEDB01 | DS_MSSQL_RETAIL |
Database type | Oracle (DataDirect - Service Name) | MS SQL SERVER (DataDirect) |
Host name/IP | <IP_ORACLE> | <IP_MSSQL> |
Port number | 1521 | 1433 |
Service name / Database | orcl | RetailDB |
User name / Password | guardium_cls / <MK_GUARDIUM_CLS> | guardium_cls / <MK_GUARDIUM_CLS> |
Share datasource | Có | Có |
Bước 2: Nhấn Test connection, kết quả phải báo Connection successful, sau đó nhấn Save.
- Oracle trong lab là non-CDB nên Service name là orcl.
- SQL Server lắng nghe cố định cổng 1433 nên chọn MS SQL SERVER (DataDirect), không chọn bản Dynamic Port. Kết nối được bằng guardium_cls cũng xác nhận SQL Server đã bật Mixed Mode.
Hình 3: Datasource DS_ORA_ORACLEDB01 kết nối thành công |
Hình 4: Datasource DS_MSSQL_RETAIL kết nối thành công |
4. Giai đoạn 1 – Tự động khám phá CSDL
4.1. Phát hiện instance qua S-TAP
Bước 1: Truy cập Manage → Activity Monitoring → S-TAP Control.Bước 2: Chọn S-TAP của SQLDB01, nhấn biểu tượng Send Command (chữ G), chọn Run Database Instance Discovery, không tích Replace Inspection Engines rồi nhấn Apply. Làm tương tự với S-TAP của oracledb01.
- Không tích Replace Inspection Engines vì tùy chọn này thay Inspection Engine đang chạy bằng cấu hình tự dò, có thể làm S-TAP chuyển sang trạng thái lỗi.
Hình 5: Gửi lệnh Run Database Instance Discovery tới S-TAP của SQLDB01 và oracledb01
Hình 6: Báo cáo Discovered Instances
4.2. Quét mạng bằng Database Auto-discovery
Bước 1: Truy cập Discover → Database Discovery → Auto-discovery Configuration, nhấn New, đặt Process name = DISC_LAB_NETWORK.Bước 2: Thêm hai dòng <IP_MSSQL> và <IP_ORACLE>, mỗi dòng khai các cổng mặc định của SQL Server và Oracle: 1521, 1433, 1522, 1434, 1526. Tích Run probe after scan và Skip host discovery, nhấn Apply.
- Chỉ khai báo IP của các máy lab: khai báo cả dải /24 sẽ quét ra CSDL của các máy khác trong mạng.
- Phải tích Skip host discovery: Windows Server chặn ping nên nếu Guardium ping trước, SQLDB01 bị bỏ qua.
Hình 7: Process DISC_LAB_NETWORK với IP và cổng của hai máy CSDL
Hình 8: Lịch quét lúc 01:00 hằng ngày
Hình 9: Báo cáo Databases Discovered sau khi quét
4.3. Báo cáo và dashboard tổng quan CSDL
Bước 1: Truy cập Reports → Report Configuration Tools → Query-Report Builder, chọn domain Discovered Instances (loại CSDL nằm ở cột Protocol) và tạo hai query:- Q_DB_BY_TYPE: cột Protocol (Field Mode = Value), tích Count, sắp xếp theo Count, điều kiện Port Min <> 1434 để bỏ dòng cổng DAC; hiển thị dạng biểu đồ tròn.
- Q_DB_BY_SERVER: các cột Host, Protocol, Instance name, Port Min, Timestamp (không tích Count), sắp xếp theo Host, cùng điều kiện Port Min <> 1434; hiển thị dạng bảng.
Hình 10: Dashboard DB Discovery Overview: số CSDL theo loại và danh sách instance theo máy chủ
5. Giai đoạn 2 – Tự động phân loại dữ liệu nhạy cảm
Cách 1 dùng bộ rule có sẵn để kiểm tra khả năng nhận diện dữ liệu Việt Nam. Cách 2 tự xây dựng rule và là cấu hình được dùng cho giám sát ở giai đoạn 3.5.1. Cách 1 – Khảo sát bằng rule GDPR có sẵn
Bước 1: Truy cập Discover → Classification → Discover Sensitive Data, nhấn New, đặt tên SCN_BUILTIN_BASELINE.Bước 2: What to discover: chọn policy phân loại có sẵn GDPR (33 rule), không thêm rule tự viết.
Bước 3: Where to search: chọn DS_ORA_ORACLEDB01 và DS_MSSQL_RETAIL.
Bước 4: Run discovery: nhấn Run Now, chờ tiến trình ở trạng thái COMPLETED.
Bước 5: Review report: xem danh sách bảng, cột và rule đã khớp; lọc thử theo cccd và phone.
Hình 11: Kết quả quét bằng 33 rule GDPR (trên) và khi lọc theo cccd (dưới)
5.2. Cách 2 – Tự xây dựng classification policy
Bước 1: Truy cập Discover → Classification → Discover Sensitive Data, nhấn New và nhập:Thuộc tính | Giá trị |
Name | SCN_RETAIL_SENSITIVE_DATA |
Description | Phân loại dữ liệu PCI/PII trên Oracle và SQL Server của hệ thống bán lẻ |
Classification policy | POL_RETAIL_SENSITIVE_DATA (tạo mới bằng nút +) |
Category / Classification | Sensitive / Sensitive Data |
Datasource type | Relational (SQL) |
- Category là danh sách chọn, không nhận giá trị gõ tay; thêm giá trị mới bằng biểu tượng bút chì.
Hình 12: Thông tin kịch bản SCN_RETAIL_SENSITIVE_DATA
Rule | Loại rule | Điều kiện | Category |
RULE_CREDIT_CARD | Template Credit Card Number | Mẫu số thẻ + thuật toán Luhn | PCI |
RULE_VN_CCCD | Search for Data | Search expression: ^0[0-9]{2}[0-3][0-9]{2}[0-9]{6}$ | PII |
RULE_VN_PHONE | Search for Data | Search expression: ^(0|84|\+84)(3|5|7|8|9)[0-9]{8}$ | PII |
RULE_EMAIL | Search for Data | Search expression: ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ | PII |
RULE_SALARY_COLUMN | Search for Data | Column name like: %SALARY% | Confidential |
RULE_LUONG_COLUMN | Search for Data | Column name like: %LUONG% | Confidential |
Hình 13: Sáu rule trong POL_RETAIL_SENSITIVE_DATA, đều bật Continue On Match
- Data Type: rule regex chỉ chọn Text; rule lương chọn thêm Number vì cột lương có kiểu số.
- Continue on match: tích ở mọi rule để các rule sau vẫn được đánh giá khi một rule đã khớp.
- Hit percentage = 50: cột chỉ được kết luận nhạy cảm khi ít nhất 50% mẫu khớp regex, giảm dương tính giả.
- Minimum / Maximum length là kích thước khai báo của cột, không phải độ dài giá trị. CCCD: Minimum = Maximum = 12 (cột VARCHAR(12)). Số điện thoại: Minimum = 10, để trống Maximum (cột VARCHAR(15)).
- Table name like, Column name like để trống ở các rule regex để nhận diện theo nội dung, không phụ thuộc tên cột.
- Regex CCCD bám cấu trúc 12 số: 3 số mã tỉnh, 1 số giới tính/thế kỷ (0–3), 2 số năm sinh, 6 số ngẫu nhiên. Regex số điện thoại nhận các đầu số di động 03x, 05x, 07x, 08x, 09x và dạng 84/+84.
Hình 14: Rule Criteria của RULE_VN_CCCD
· ACT_<TÊN>_COLS: Add to Group of Object/Fields → GRP_SENSITIVE_COLUMNS, định dạng tên Fully Qualified Name (Schema.Object).
· ACT_<TÊN>_OBJS: Add to Group of Objects → GRP_SENSITIVE_OBJECTS, định dạng tên Like %Name. Thành viên được ghi dạng %customers, khớp được cả customers và retail.customers trong câu SQL.
· RULE_CREDIT_CARD lấy từ template nên không có sẵn action, phải tự thêm.
Hình 15: Hai action Add to Group của RULE_VN_CCCD
Hình 16: Hai datasource được chọn để quét
5.3. Chạy phân loại và lên lịch tự động
Bước 1: Ở Run discovery, nhấn Run Now. Trạng thái chuyển WAITING → RUNNING → COMPLETED; mục Review report chỉ bật khi tiến trình hoàn tất.- Guardium chạy lần lượt từng job nên có thể chờ lâu ở WAITING; theo dõi trong Guardium Job Queue.
Hình 17: Lịch chạy phân loại lúc 00:00 hằng ngày
5.4. Kiểm tra kết quả phân loại
Bước 1: Mở Review report của kịch bản (có thể lọc theo tên cột ở ô Filter) và report Export Sensitive Data To Discovery.
Hình 18: Review report của SCN_RETAIL_SENSITIVE_DATA ở lần chạy đầu
Hình 19: Report Export Sensitive Data To Discovery ở lần chạy đầu: 14 cột, chưa có cột phone
Hình 20: GRP_SENSITIVE_COLUMNS sau lần chạy đầu: 12 thành viên, chưa có phone và credit_card
- Thiếu cột phone: RULE_VN_PHONE đặt Maximum length = 12, nhỏ hơn kích thước cột phone VARCHAR(15), nên cột bị loại trước khi so regex.
Hình 21: RULE_VN_PHONE ở lần chạy đầu: Maximum length = 12
- Thiếu credit_card: RULE_CREDIT_CARD lấy từ template chưa có action Add to Group, nên cột có trong Review report nhưng không vào group.
Hình 22: GRP_SENSITIVE_COLUMNS và GRP_SENSITIVE_OBJECTS sau khi chạy lại: 18 và 2 thành viên
6. Giai đoạn 3 – Giám sát truy cập dữ liệu nhạy cảm
6.1. Tạo security policy
Bước 1: Truy cập Protect → Security Policies → Policy Builder for Data, nhấn New, đặt Policy Description = POL_MONITOR_SENSITIVE_DATA, Category = Security, không chọn Log Flat và Rules on Flat.Bước 2: Thêm hai access rule theo đúng thứ tự:
Thuộc tính | Rule 1 – Cảnh báo truy cập trái phép | Rule 2 – Ghi log truy cập dữ liệu nhạy cảm |
Rule name | ALERT_UNAUTHORIZED_SENSITIVE_ACCESS | LOG_SENSITIVE_ACCESS |
Object | In Group GRP_SENSITIVE_OBJECTS | In Group GRP_SENSITIVE_OBJECTS |
Database user | Not In Group GRP_AUTHORIZED_USERS | Bỏ trống (mọi user) |
Command | Bỏ trống (mọi lệnh) | Bỏ trống |
Action | ALERT PER MATCH | LOG FULL DETAILS |
Continue to next rule | Có | Không |
Severity | High | Information |
Hình 23: Hai access rule của POL_MONITOR_SENSITIVE_DATA
Hình 24: Điều kiện của Rule 1 ALERT_UNAUTHORIZED_SENSITIVE_ACCESS
6.2. Cài đặt policy
Bước 1: Truy cập Protect → Security Policies → Policy Installation, chọn POL_MONITOR_SENSITIVE_DATA, chọn Install & Override.- Collector đang cài policy mặc định Default – Ignore Data Activity for Unknown Connections. Nếu chỉ cài thêm phía sau (Install last), traffic có thể bị policy này bỏ qua trước khi tới các rule giám sát.
Hình 25: POL_MONITOR_SENSITIVE_DATA đã được cài đặt
6.3. Tạo báo cáo truy cập dữ liệu nhạy cảm
Bước 1: Truy cập Reports → Report Configuration Tools → Query-Report Builder, chọn domain Access, Main entity = Object, tạo query Q_SENSITIVE_DATA_ACCESS:- Các trường: Session Start, Client IP, Server IP, Server Type, DB User Name, Source Program, Object Name, Sql, SQL Verb.
- Điều kiện: Object Name LIKE GROUP GRP_SENSITIVE_OBJECTS (không dùng IN GROUP vì thành viên group ở dạng mẫu %customers).
- Sắp xếp theo Session Start giảm dần.
6.4. Sinh truy cập kiểm thử
Các lệnh chạy ngay trên máy chủ CSDL nhưng luôn kết nối qua IP và cổng (TCP), không dùng sqlplus / as sysdba hay Shared Memory, để S-TAP ghi nhận được. Vì vậy Client IP trong báo cáo trùng với Server IP.Oracle (trên oracledb01, user oracle):
-- Kịch bản 1: user hợp lệ truy cập bảng nhạy cảm
sqlplus retail/"<MK_RETAIL>"@//<IP_ORACLE>:1521/orcl
SQL> SELECT full_name, phone, credit_card FROM retail.customers WHERE ROWNUM <= 5;
-- Kịch bản 2: user không được phép truy cập bảng nhạy cảm
sqlplus intern_test/"<MK_INTERN_TEST>"@//<IP_ORACLE>:1521/orcl
SQL> SELECT full_name, cccd, credit_card FROM retail.customers WHERE ROWNUM <= 5;
SQL Server (PowerShell trên SQLDB01):
# Kịch bản 1: user hợp lệ truy cập bảng nhạy cảm
sqlcmd -S <IP_MSSQL>,1433 -d RetailDB -U retail_app -P "<MK_RETAIL_APP>" -No -Q "SELECT TOP 5 full_name, phone FROM retail.customers"
# Kịch bản 2: user không được phép truy cập bảng nhạy cảm
sqlcmd -S <IP_MSSQL>,1433 -d RetailDB -U intern_test -P "<MK_INTERN_TEST>" -No -Q "SELECT TOP 5 cccd, credit_card FROM retail.customers"
- -No cho phép kết nối không bắt buộc mã hóa; thiếu tùy chọn này, sqlcmd (ODBC Driver 18) báo lỗi "certificate chain was issued by an authority that is not trusted" với chứng chỉ tự ký. Không dùng -C vì kết nối vẫn được mã hóa TLS và S-TAP có thể không đọc được câu lệnh.
6.5. Kiểm tra kết quả giám sát
Bước 1: Mở report Q_SENSITIVE_DATA_ACCESS.
Hình 26: Q_SENSITIVE_DATA_ACCESS ghi nhận truy cập bảng customers trên cả hai CSDL
Bước 2: Mở báo cáo Access policy violations, lọc theo rule ALERT_UNAUTHORIZED_SENSITIVE_ACCESS. Alerter (email/syslog) chưa được cấu hình trong lab nên cảnh báo được kiểm tra qua báo cáo này.
Hình 27: Access policy violations ghi nhận truy cập trái phép của INTERN_TEST trên Oracle và SQL Server