Thứ Tư, 25 tháng 2, 2026

MODULE 11: TRIỂN KHAI AUDIT VÀ BẢO MẬT CSDL (TDE & AUDITING)

1. Tổng quan

Bảo mật cơ sở dữ liệu Enterprise xoay quanh hai trụ cột cốt lõi:

  1. Data-at-Rest Encryption (TDE): Mã hóa file vật lý (.dbf, .mdf, .ibd) trên đĩa cứng. Ngăn chặn việc hacker hoặc nhân viên trộm ổ cứng mang về nhà mount lên server khác để đọc.

  2. Auditing (Theo dõi vết): Ghi log lại mọi hành vi nhạy cảm (DDL, DML, Login thất bại). Hệ thống Audit chuẩn phải tách biệt quyền: DBA quản trị dữ liệu nhưng không được phép xóa log Audit.

2. Chi tiết các nội dung

A. Triết lý Mã hóa dữ liệu vật lý (TDE)

  • Oracle: TDE quản lý qua Wallet (Keystore). Nếu mất Wallet, ngay cả chuyên gia của Oracle cũng không thể cứu được DB của anh.

  • SQL Server: Mã hóa toàn bộ Database. Quản lý theo cấp bậc: Service Master Key $\rightarrow$ Database Master Key $\rightarrow$ Certificate $\rightarrow$ Database Encryption Key.

  • Nhóm Open Source: Postgres thường dựa vào mã hóa phân vùng đĩa của OS (LUKS). MySQL dùng Keyring Plugin. MongoDB bắt buộc dùng bản Enterprise hoặc Atlas để có tính năng này.

B. Triết lý Giám sát (Auditing)

  • Oracle: Dùng Unified Auditing (Log ghi vào phân vùng an toàn, không nằm trong các bảng SYS.AUD$ cũ).

  • SQL Server: Dùng SQL Server Audit (Extended Events) ghi trực tiếp ra file .sqlaudit trên Windows/Linux.

  • PostgreSQL & MySQL: Mặc định log rất sơ sài, bắt buộc phải cài thêm Plugin/Extension (pgAudit hoặc MariaDB Audit Plugin).


C. SOP CHI TIẾT: CÀI ĐẶT, CẤU HÌNH, TRIỂN KHAI VÀ KIỂM TRA

Dưới đây là quy trình thực chiến từng bước cho cả 5 hệ thống. Chúng ta sẽ lấy TDE (Mã hóa)Audit lệnh DROP/DELETE làm mục tiêu.

1. ORACLE (TDE & Unified Auditing)

Bước 1 - Cài đặt & Cấu hình (Tạo Keystore cho TDE):

Anh phải tạo thư mục chứa Wallet ngoài hệ điều hành và khai báo vào sqlnet.ora:

Plaintext
ENCRYPTION_WALLET_LOCATION =
  (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/orcl/wallet)))

Bước 2 - Triển khai (Set Master Key & Bật Audit):

Vào SQL*Plus, khởi tạo mật khẩu Wallet và bật mã hóa Tablespace:

SQL
-- Tạo và mở Wallet
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/orcl/wallet' IDENTIFIED BY "WalletPass123";
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WalletPass123";
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "WalletPass123" WITH BACKUP;

-- Mã hóa 1 Tablespace
CREATE TABLESPACE secure_data DATAFILE '/u02/secure01.dbf' SIZE 1G ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);

-- Tạo Policy Audit bắt lệnh xóa dữ liệu
CREATE AUDIT POLICY audit_delete_pol ACTIONS DELETE ON sales_schema.orders;
AUDIT POLICY audit_delete_pol;

Bước 3 - Kiểm tra:

SQL
-- Kiểm tra TDE
SELECT tablespace_name, encrypted FROM dba_tablespaces WHERE encrypted = 'YES';
-- Kiểm tra vết Audit (Sau khi có người chạy lệnh DELETE)
SELECT dbusername, action_name, object_name, sql_text FROM unified_audit_trail WHERE policy_name = 'AUDIT_DELETE_POL';

2. SQL SERVER (TDE & SQL Server Audit)

Bước 1 - Cài đặt & Cấu hình:

(Không cần cài thêm phần mềm, tính năng có sẵn trong Engine).

Tạo thư mục an toàn trên OS để chứa file Audit: C:\SQL_Audits\.

Bước 2 - Triển khai (Bật TDE và Audit):

SQL
USE master;
-- 1. Triển khai TDE
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ComplexPassword123!';
CREATE CERTIFICATE TDE_Cert WITH SUBJECT = 'TDE Certificate';
USE sopirs_new;
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE TDE_Cert;
ALTER DATABASE sopirs_new SET ENCRYPTION ON;

-- 2. Triển khai Audit ghi ra file
USE master;
CREATE SERVER AUDIT ServerLevelAudit TO FILE (FILEPATH = 'C:\SQL_Audits\') WITH (ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT ServerLevelAudit WITH (STATE = ON);

-- Theo dõi mọi lệnh DROP TABLE trên database
USE sopirs_new;
CREATE DATABASE AUDIT SPECIFICATION DB_Drop_Audit 
FOR SERVER AUDIT ServerLevelAudit 
ADD (SCHEMA_OBJECT_CHANGE_GROUP) WITH (STATE = ON);

Bước 3 - Kiểm tra:

SQL
-- Kiểm tra TDE
SELECT db_name(database_id) as DB, encryption_state_desc FROM sys.dm_database_encryption_keys;
-- Kiểm tra Audit log (SQL Server cho phép đọc file audit qua hàm)
SELECT event_time, server_principal_name, action_id, statement 
FROM sys.fn_get_audit_file('C:\SQL_Audits\*.sqlaudit', DEFAULT, DEFAULT);

3. POSTGRESQL (pgAudit Extension)

Bước 1 - Cài đặt & Cấu hình:

Trái với Oracle/SQL Server, anh phải cài thư viện từ OS.

Bash
yum install pgaudit14  # Cài đặt gói pgAudit cho Postgres 14

Sau đó sửa file postgresql.conf:

Plaintext
shared_preload_libraries = 'pgaudit'  # Bắt buộc phải restart service sau khi thêm
pgaudit.log = 'ddl, write'            # Chỉ Audit các lệnh đổi cấu trúc và INSERT/UPDATE/DELETE

Bước 2 - Triển khai:

Restart Service Postgres. Sau đó kết nối vào database ứng dụng để bật extension:

SQL
CREATE EXTENSION pgaudit;
-- Ép tất cả các session phải tuân thủ việc ghi log
ALTER SYSTEM SET pgaudit.log_level = 'log';
SELECT pg_reload_conf();

Bước 3 - Kiểm tra:

Tạo thử một bảng và xóa nó. Mở file log của OS (/var/lib/pgsql/14/data/log/postgresql-*.log) anh sẽ thấy:

Plaintext
LOG:  AUDIT: SESSION,2,1,DDL,DROP TABLE,TABLE,public.test_table,drop table test_table;

4. MYSQL / MARIADB (Audit Plugin & Keyring)

Bước 1 - Cài đặt & Cấu hình:

Để bật Audit, anh dùng MariaDB Audit Plugin (chạy tốt trên cả MySQL). Để bật TDE, anh cần nạp Keyring file. Mở file my.cnf:

Plaintext
[mysqld]
# Nạp Keyring để mã hóa TDE
early-plugin-load=keyring_file.so
keyring_file_data=/var/lib/mysql-keyring/keyring

# Bật Audit Plugin
plugin-load-add=server_audit.so
server_audit_logging=ON
server_audit_events=QUERY_DDL,QUERY_DML
server_audit_file_path=/var/log/mysql/audit.log

Bước 2 - Triển khai:

Restart service mysqld.

Mã hóa một bảng quan trọng để test TDE:

SQL
ALTER TABLE app_db.salary_info ENCRYPTION='Y';

Bước 3 - Kiểm tra:

SQL
-- Kiểm tra xem bảng đã được mã hóa chưa
SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS 
FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION="Y"%';

(Dùng lệnh cat /var/log/mysql/audit.log trên Linux để xem các lệnh DROP/UPDATE vừa bị ghi vết).

5. MONGODB (Audit Log)

Bước 1 - Cài đặt & Cấu hình:

Bản Community không hỗ trợ TDE. Với tính năng Audit (bản Enterprise), anh sửa file YAML /etc/mongod.conf:

YAML
auditLog:
  destination: file
  format: JSON
  path: /var/log/mongodb/audit.json
  # Chỉ rình bắt hành vi xóa bộ sưu tập (Collection)
  filter: '{ atype: "dropCollection" }'

Bước 2 - Triển khai:

Restart service mongod (systemctl restart mongod).

Bước 3 - Kiểm tra:

Dùng mongosh kết nối và thực hiện lệnh xóa:

JavaScript
use testdb;
db.important_data.drop();

Mở file /var/log/mongodb/audit.json trên OS, anh sẽ thấy bản ghi JSON chi tiết ghi lại user nào, IP nào, giờ nào đã thực hiện hành vi dropCollection.


3. Tóm tắt lại nội dung của bài học

  • Để triển khai bảo mật thành công, DBA không thể tự làm một mình. Ví dụ, tạo thư mục chứa file Wallet (Oracle) hay file .sqlaudit (SQL Server) cần phối hợp với System Admin để phân quyền NTFS/Chmod trên OS cực kỳ khắt khe.

  • Nhóm CSDL mã nguồn mở (Postgres, MySQL) đòi hỏi kỹ năng Linux tốt vì anh phải thao tác cài đặt các Package/Plugin (pgaudit, server_audit) và load chúng vào bộ nhớ thông qua các file text cấu hình.

  • TDE là con dao hai lưỡi. Mã hóa dữ liệu giúp an toàn nhưng buộc anh phải backup Master Key / Wallet. Nếu anh làm mất Key này, toàn bộ file Database xem như bị hủy hoại vĩnh viễn, không có "Backdoor" nào từ hãng có thể mở được.


4. Câu hỏi ôn tập

  1. Hỏi (Oracle): Tham số nào trong file sqlnet.ora dùng để trỏ hệ thống đến thư mục chứa file Keystore (Wallet) cho quá trình mã hóa TDE?

    • Đáp: ENCRYPTION_WALLET_LOCATION.

  2. Hỏi (SQL Server): Khi anh backup một Database đang bật TDE đem sang một máy chủ dự phòng (DR Server) để restore, anh bắt buộc phải mang theo đối tượng nào từ máy chủ gốc?

    • Đáp: Bắt buộc phải mang theo file backup của Certificate (Chứng chỉ) và Password của chứng chỉ đó để nạp vào máy chủ DR trước khi chạy lệnh Restore DB.

  3. Hỏi (PostgreSQL): Tại sao anh phải thêm chữ pgaudit vào tham số shared_preload_libraries trong file cấu hình và restart service thay vì chỉ chạy lệnh CREATE EXTENSION?

    • Đáp:pgAudit cần can thiệp sâu vào nhân xử lý của Postgres (Executor hook) để móc tách được câu lệnh thật sự đằng sau các Procedure, do đó nó phải được tải vào vùng nhớ chung (Shared Memory) ngay lúc khởi động hệ thống.

  4. Hỏi (MySQL): Trong cấu hình my.cnf, tham số server_audit_events dùng để làm gì?

    • Đáp: Dùng để lọc loại hành vi cần ghi log (Ví dụ: CONNECT, QUERY_DDL, QUERY_DML). Nếu không set, nó sẽ ghi mọi thứ, làm file log bị phình to (I/O Bottleneck).

  5. Hỏi (MongoDB): Định dạng file xuất ra chuẩn nhất và dễ tích hợp nhất của Audit Log trong MongoDB là định dạng nào?

    • Đáp: Định dạng JSON (hoặc BSON). Nó giúp các hệ thống đọc log tập trung như ELK/Splunk dễ dàng parse (phân tích) dữ liệu.


5. Bài tập thực hành (Đọc và phân tích Audit Trail)

Đề bài: Giả sử hệ thống vừa xảy ra sự cố và anh đã bật tính năng Audit theo chuẩn ở Phần C. Hãy viết câu truy vấn hoặc câu lệnh OS để trích xuất 10 dòng log audit mới nhất xem ai vừa thao tác trên DB cho 5 hệ thống.

Đáp án:

1. Oracle: (Truy vấn view nội bộ)

SQL
SELECT event_timestamp, dbusername, action_name, object_name 
FROM unified_audit_trail 
ORDER BY event_timestamp DESC 
FETCH FIRST 10 ROWS ONLY;

2. SQL Server: (Dùng hàm đọc file .sqlaudit)

SQL
SELECT TOP 10 event_time, server_principal_name, action_id, statement 
FROM sys.fn_get_audit_file('C:\SQL_Audits\*.sqlaudit', DEFAULT, DEFAULT)
ORDER BY event_time DESC;

3. PostgreSQL: (Dùng lệnh OS trên Linux để lọc file log)

Bash
tail -n 1000 /var/lib/pgsql/14/data/log/postgresql-*.log | grep "AUDIT" | tail -n 10

4. MySQL / MariaDB: (Dùng lệnh OS đọc file audit log)

Bash
tail -n 10 /var/log/mysql/audit.log

5. MongoDB: (Dùng công cụ jq trên Linux để format định dạng JSON cho dễ đọc)

Bash
tail -n 10 /var/log/mongodb/audit.json | jq .
=============================
TƯ VẤN: Click Here hoặc Hotline/Zalo 090.29.12.888
=============================
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

=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, 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/21c/23c/23ai, 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, docker, k8s, micro service, 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