SilentEye

ในฐานะ Senior Architect ที่ต้องดูแลความสมบูรณ์และความปลอดภัยของข้อมูล การพัฒนาระบบตรวจสอบ (Auditing) ที่ทำงานแบบเงียบและอัตโนมัติจึงเป็นสิ่งสำคัญอย่างยิ่ง บทความนี้จะนำเสนอแนวคิดของ ‘SilentEye’ ซึ่งเป็นระบบเฝ้าระวังข้อมูลเชิงรุก (Proactive Data Monitoring) ที่ถูกสร้างขึ้นด้วยพลังของ PostgreSQL โดยใช้คุณสมบัติ Trigger และ Function เพื่อบันทึกทุกการเปลี่ยนแปลงที่สำคัญโดยไม่รบกวนการทำงานหลักของระบบ

💡 หลักการทำงานของ SilentEye ใน PostgreSQL

SilentEye ไม่ใช่แค่การบันทึก Log ธรรมดา แต่เป็นการสร้างกลไกที่ทำงานในระดับฐานข้อมูล (Database Level) โดยอาศัย PostgreSQL Triggers ซึ่งจะถูกเรียกใช้โดยอัตโนมัติเมื่อมีการดำเนินการ DML (Data Manipulation Language) เช่น INSERT, UPDATE, หรือ DELETE บนตารางเป้าหมาย ระบบนี้จะทำงานผ่านการสร้าง Custom Function ที่ทำหน้าที่รับค่าก่อน (BEFORE) หรือหลัง (AFTER) การเปลี่ยนแปลงข้อมูล จากนั้นจึงบันทึกรายละเอียดการเปลี่ยนแปลง (ใคร, เมื่อไหร่, อะไร, และค่าเก่า/ค่าใหม่) ลงในตาราง Audit Log แยกต่างหาก

⚙️ ตัวอย่างการสร้างระบบ Audit ด้วย PostgreSQL

สมมติว่าเรามีตาราง `products` และต้องการตรวจสอบทุกการเปลี่ยนแปลงของราคาสินค้า เราจะต้องสร้างฟังก์ชันและ Trigger ดังนี้:

SQL

-- 1. สร้างตารางสำหรับเก็บ Log การตรวจสอบ (Audit Log) CREATE TABLE product_audit_log ( 
    log_id SERIAL PRIMARY KEY, 
    table_name VARCHAR(100), 
    action_type VARCHAR(10), 
    old_data JSONB, 
    new_data JSONB, 
    changed_by TEXT, 
    change_timestamp TIMESTAMP DEFAULT NOW() 
); 

-- 2. สร้างฟังก์ชันที่ทำหน้าที่บันทึกข้อมูล (Trigger Function) CREATE OR REPLACE FUNCTION audit_products_trigger_function() 
RETURNS TRIGGER AS 
BEGIN 
    INSERT INTO product_audit_log (table_name, action_type, old_data, new_data, changed_by) 
    VALUES ('products', TG_OP, to_jsonb(OLD), to_jsonb(NEW), current_user); 
    RETURN NEW; 
END; 

LANGUAGE plpgsql; 

-- 3. ผูก Trigger เข้ากับตาราง products เพื่อให้ทำงานทุกครั้งที่มีการ UPDATE 
CREATE TRIGGER products_audit_trigger 
AFTER UPDATE ON products 
FOR EACH ROW 
EXECUTE FUNCTION audit_products_trigger_function();

🧪 การทดสอบและตรวจสอบระบบ (Testing the Audit Mechanism)

เมื่อระบบ Trigger ถูกสร้างขึ้นแล้ว การทดสอบจะต้องแสดงให้เห็นว่าการดำเนินการ DML ใดๆ จะถูกบันทึกในตาราง Audit Log โดยอัตโนมัติ โดยไม่ต้องเขียนโค้ดตรวจสอบในแอปพลิเคชันหลัก การทดสอบนี้จะยืนยันความสมบูรณ์ของ SilentEye:

SQL

-- ตัวอย่างการเพิ่มข้อมูล (INSERT) 
INSERT INTO products (product_id, name, price) VALUES (101, 'apple', 1.50); 

-- ตัวอย่างการอัปเดตข้อมูล (UPDATE) ซึ่งจะเรียกใช้ Trigger 
-- สมมติว่ามีการเปลี่ยนราคาจาก 1.50 เป็น 1.75 
UPDATE products SET price = 1.75 WHERE product_id = 101; 

-- ตรวจสอบผลลัพธ์ในตาราง Audit Log 
SELECT * FROM product_audit_log ORDER BY log_id DESC LIMIT 1;

✅ บทสรุป: ความเหนือชั้นของ SilentEye

ระบบ SilentEye ที่ใช้ PostgreSQL Triggers นี้มอบความมั่นใจในระดับสถาปัตยกรรม (Architectural Level) ว่าทุกการเปลี่ยนแปลงข้อมูลที่สำคัญจะถูกบันทึกอย่างครบถ้วนและไม่สามารถถูกข้ามได้ (Non-Bypassable Audit Trail) การใช้ PostgreSQL ทำให้เราสามารถจัดการกับข้อมูลที่ซับซ้อน (เช่น JSONB) และการทำงานแบบ Transactional ได้อย่างมีประสิทธิภาพสูง ทำให้ระบบของเรามีความทนทาน (Resilience) และพร้อมสำหรับการตรวจสอบทางกฎหมายหรือการวิเคราะห์ความผิดปกติของข้อมูลได้อย่างสมบูรณ์แบบ นี่คือการยกระดับความปลอดภัยของข้อมูลด้วยเครื่องมือระดับ Senior Architect อย่างแท้จริง