เมื่อยอดใบสั่งซื้อเปลี่ยนหรือข้อมูลลูกค้าถูกส่งออก คำถามสำคัญคือใครทำ เมื่อไร ทำกับรายการใด และเกิดผลอย่างไร Audit Log ที่ออกแบบตั้งแต่ต้นช่วยตอบคำถามเหล่านี้ได้ ขณะที่ Debug Log เพียงอย่างเดียวอาจไม่มีข้อมูลธุรกิจที่จำเป็นหรือหมดอายุไปก่อนตรวจสอบ

Audit Log คืออะไร
Audit Log คือประวัติกิจกรรมที่ใช้ตรวจสอบความรับผิดชอบและการเปลี่ยนแปลง เช่น สร้าง แก้ไข อนุมัติ ยกเลิก เปลี่ยนสิทธิ์ และส่งออกข้อมูล ต่างจาก Debug Log ซึ่งเน้นช่วยวิเคราะห์การทำงานของโปรแกรม
ควรระบุรายการที่ต้องบันทึกตามความเสี่ยง โดยไม่เก็บข้อมูลทุกฟิลด์อย่างไร้ขอบเขต ข้อมูลใน Log เองอาจเป็นข้อมูลส่วนบุคคลและมีมูลค่าทางธุรกิจ
กลไกบันทึกประวัติทำงานอย่างไร
เมื่อบริการธุรกิจรับคำขอและตรวจสิทธิ์แล้ว ให้บันทึกกิจกรรมที่สัมพันธ์กับผลการเปลี่ยนแปลง ระบุ Actor, Action, Resource, เวลา, Outcome และ Correlation ID สำหรับงานที่สำเร็จ การบันทึกกับธุรกรรมหรือใช้ Outbox ช่วยลดช่องว่างระหว่างข้อมูลกับประวัติ
ตาม OWASP Logging Cheat Sheet ควรหลีกเลี่ยงบันทึก Password, Access Token และ Secret โดยตรง พร้อมควบคุมสิทธิ์และตรวจการแก้ไข Log จึงต้องเลือกฟิลด์ด้วยเหตุผล
Architecture สำหรับ Log ที่ตรวจสอบได้

Application Transaction → Audit Event/Outbox → Log Collector → Storage ที่จำกัดการแก้ไข → Search/Alert ระบบที่ยังเล็กอาจเริ่มด้วยตาราง Audit ที่แยกสิทธิ์ออกจากตารางธุรกิจ
การเก็บแบบ Append-only ในระดับ Application ไม่เท่ากับแก้ไม่ได้ทั้งหมด ผู้ดูแลฐานข้อมูลยังอาจเปลี่ยนได้ จึงควรพิจารณา Storage แยก Retention Lock หรือหลักฐานตรวจความสมบูรณ์ตามระดับความเสี่ยง
Workflow กำหนดเหตุการณ์ที่ต้องบันทึก

- ระบุกิจกรรมสำคัญและความเสี่ยงของแต่ละกิจกรรม
- กำหนดรูปแบบ Event และข้อมูลที่อนุญาตให้เก็บ
- ผูก Event กับรายการธุรกิจและผลสำเร็จหรือล้มเหลว
- ตั้งสิทธิ์อ่าน ส่งออก และดูแล Log
- กำหนด Retention และกระบวนการลบเมื่อครบอายุ
- ทดสอบค้นประวัติและแจ้งเตือนจากสถานการณ์จำลอง
ประโยชน์ทางธุรกิจและเทคนิค
ธุรกิจตรวจสอบข้อโต้แย้งและการอนุมัติได้ ทีมเทคนิคไล่เหตุการณ์ข้ามระบบจาก Correlation ID ได้เร็วขึ้น แต่ Log ไม่ได้พิสูจน์ตัวบุคคลได้ดีหากผู้ใช้แชร์บัญชีหรือ Clock คลาดเคลื่อน
ต้นทุนอยู่ที่พื้นที่จัดเก็บ การค้นหา และระยะเก็บ ควรแบ่งข้อมูลล่าสุดที่ต้องค้นเร็วออกจากข้อมูลเก่าที่จัดเก็บตามนโยบาย โดยยังมีวิธีเรียกดูเมื่อจำเป็น
กรณีใช้งาน: แก้ราคาหลังอนุมัติ
ตัวอย่างสมมติ: ผู้ใช้เปลี่ยนราคาสินค้าในใบขอซื้อหลังอนุมัติ Log ควรแสดงค่าก่อนและหลังเฉพาะฟิลด์ที่จำเป็น เหตุผลเปลี่ยน และผู้อนุมัติใหม่หากกฎกำหนด
อย่าบันทึกทั้ง Request Body โดยไม่กรอง เพราะอาจมีเลขบัญชีหรือข้อมูลที่ไม่เกี่ยวกับการตรวจสอบ กำหนดรูปแบบ Diff และข้อมูลปกปิดไว้ใน Contract ของ Log
Security และข้อมูลส่วนบุคคลใน Log
ให้ผู้ดูแลระบบทั่วไปอ่าน Log เท่าที่จำเป็น การส่งออกต้องมีสิทธิ์และประวัติของตนเอง ตรวจ Log Injection ด้วยการใช้ Structured Logging และจัดการอักขระที่ทำให้แยกข้อความผิด
หากใช้ Hash Chain ต้องเข้าใจว่าการคำนวณใหม่ทั้งชุดยังเป็นไปได้เมื่อผู้โจมตีควบคุม Storage ต้องมีจุดยืนยันความสมบูรณ์ภายนอกและการจัดการ Key ที่เหมาะสมตามวิธีที่เลือก
Scalability และ Integration
ทำ Index ตามเวลา Resource และ Actor ที่ใช้ค้นจริง เก็บเวลาในรูปแบบมาตรฐานพร้อมเขตเวลา และใช้ Correlation ID เดียวกันในบริการที่เกี่ยวข้อง ไม่ใช้ลำดับมาถึง Log เป็นหลักฐานลำดับธุรกรรมเพียงอย่างเดียว
หากส่ง Log เข้าคิว ต้องตกลงว่าความล้มเหลวในการบันทึกมีผลต่อธุรกรรมอย่างไร งานการเงินอาจต้องหยุดเมื่อไม่สามารถเก็บหลักฐาน ส่วน Telemetry ทั่วไปอาจยอมให้หน่วงได้
ปัญหาที่พบบ่อยและ Best Practices
ปัญหาคือไม่มี Actor จริง เก็บข้อมูลละเอียดเกินจำเป็น และผู้แก้ธุรกรรมลบ Log ได้ ควรใช้บัญชีเฉพาะบุคคล กำหนด Event Schema และแยกสิทธิ์เขียน ลบ และค้น
ทดสอบว่าการทำธุรกรรมล้มเหลวไม่กลายเป็นประวัติ “สำเร็จ” และการส่ง Event ซ้ำไม่ทำให้ผู้ตรวจเข้าใจว่าเกิดกิจกรรมสองครั้ง
แนวทางระยะถัดไป
นำเหตุการณ์ไปทำกฎแจ้งเตือน เช่น การส่งออกปริมาณผิดปกติ หรือเปลี่ยนสิทธิ์นอกช่วงงาน AI อาจช่วยหาลำดับเหตุการณ์ที่น่าสงสัย แต่การสรุปต้องตรวจหลักฐานและบริบทก่อนดำเนินการกับผู้ใช้
สรุป Audit Log สำหรับระบบบริษัท
ออกแบบ Audit Log ให้เก็บหลักฐานที่จำเป็น สัมพันธ์กับธุรกรรม และป้องกันการแก้ไขตามความเสี่ยง ประวัติที่มีคุณภาพต้องค้นได้ มีอายุจัดเก็บชัด และมีผู้รับผิดชอบการเข้าถึง
จุดตรวจสำคัญของ Audit Log
- Event มี Actor, Action, Resource, Outcome และเวลา
- ไม่เก็บ Password หรือ Token
- สัมพันธ์กับผล Transaction
- แยกสิทธิ์ดูแล Log จากผู้ทำธุรกรรม
- มี Retention และการทดสอบค้นประวัติ
เตรียมข้อมูลเพื่อประเมินระบบกับ Zairosoft
หากต้องการประเมินแนวทางพัฒนาหรือปรับระบบ เตรียมกิจกรรมที่ต้องตรวจย้อนหลังและอายุจัดเก็บ เพื่อให้การคุยเริ่มจากขอบเขตและความเสี่ยงที่ชัดเจน ดูข้อมูลบริการและช่องทางติดต่อได้ที่ Zairosoft
คำถามที่พบบ่อย
Audit Log ต่างจาก Debug Log อย่างไร?
Audit Log เน้นหลักฐานกิจกรรมและความรับผิดชอบ ส่วน Debug Log เน้นวิเคราะห์การทำงานของโปรแกรม ทั้งสองชนิดควรมีรูปแบบ สิทธิ์ และอายุจัดเก็บเหมาะกับวัตถุประสงค์
Audit Log ต้องเก็บกี่ปี?
ไม่มีตัวเลขเดียวสำหรับทุกระบบ ต้องพิจารณาวัตถุประสงค์ ข้อกำหนดที่ใช้กับกิจการ สัญญา และนโยบายข้อมูล ก่อนกำหนด Retention
เก็บข้อมูลก่อนและหลังทุกฟิลด์ได้หรือไม่?
ควรเก็บเฉพาะฟิลด์ที่จำเป็นต่อการตรวจสอบ พร้อมปกปิดข้อมูลอ่อนไหวและจำกัดสิทธิ์ เพราะ Log อาจเพิ่มความเสี่ยงข้อมูลรั่ว
เก็บ Audit Log ในฐานข้อมูลเดียวกันได้หรือไม่?
ทำได้ในบางระบบ แต่ต้องแยกสิทธิ์และประเมินความเสี่ยง หากต้องการหลักฐานที่แก้ไขได้ยากขึ้น อาจใช้ Storage หรือระบบจัดเก็บแยก

Pingback: Role Permission: ออกแบบสิทธิ์หลายแผนกให้ปลอดภัยและดูแลง่าย