ในโลกดิจิทัลที่ข้อมูลคือขุมทรัพย์ การรักษาความปลอดภัยของฐานข้อมูล (Database Security) ไม่สามารถจำกัดอยู่แค่การตั้งรหัสผ่านที่ซับซ้อนได้อีกต่อไป การป้องกันที่แท้จริงคือการสร้างระบบป้องกันหลายชั้น (Defense in Depth) ซึ่งต้องควบคุมการเข้าถึงในทุกระดับ ตั้งแต่ระดับเครือข่าย (Network) ไปจนถึงระดับสิทธิ์การทำงาน (Function Level) หากไม่มีการควบคุมที่เข้มงวดพอ ช่องโหว่เพียงเล็กน้อยก็อาจถูกใช้เป็นประตูให้ผู้ไม่ประสงค์ดีเข้ามาขโมยข้อมูลสำคัญได้
สำหรับ PostgreSQL การควบคุมการเข้าถึงอย่างมีประสิทธิภาพต้องอาศัยการทำงานร่วมกันของกลไกหลายส่วน โดยเราจะนำหลักการของ MAC Address Filtering, Static IP Assignment และ Port Security ซึ่งเป็นแนวคิดด้านเครือข่าย มาประยุกต์ใช้กับระบบฐานข้อมูล เพื่อจำกัดพื้นที่ผิวของการโจมตี (Attack Surface) ให้เหลือน้อยที่สุด
🛡️ 3 เสาหลักในการควบคุมการเข้าถึง PostgreSQL
การควบคุมการเข้าถึงใน PostgreSQL ไม่ได้ใช้ MAC Address โดยตรง แต่ใช้หลักการของที่อยู่ IP ต้นทาง (Source IP) และการจำกัดพอร์ตการเชื่อมต่อ (Port) ร่วมกับการกำหนดสิทธิ์ที่เข้มงวด นี่คือ 3 กลไกหลักที่ต้องดำเนินการ:
1. การจำกัดแหล่งที่มา (Source IP Filtering)
หลักการนี้เทียบเท่ากับการตรวจสอบบัตรประจำตัวที่หน้าประตูฐานข้อมูล โดยเราต้องกำหนดให้ PostgreSQL รับการเชื่อมต่อจากช่วง IP ที่ได้รับอนุญาตเท่านั้น กลไกหลักที่ใช้คือไฟล์ pg_hba.conf (Host-Based Authentication) ซึ่งเป็นไฟล์กำหนดค่าการตรวจสอบสิทธิ์ที่สำคัญที่สุด
สมมติว่าเราต้องการให้ฐานข้อมูลเชื่อมต่อได้เฉพาะจากเครือข่ายภายใน 192.168.1.0/24 เท่านั้น:
SQL
# TYPE ADDRESS METHOD NAME/USER</code>
# อนุญาตเฉพาะ IP ภายในที่ระบุเท่านั้น
host all all 192.168.1.0/24 scram-sha-256
การตั้งค่านี้จะบังคับให้ผู้เชื่อมต่อต้องมาจากช่วง IP ที่กำหนดเท่านั้น หากมาจากที่อื่นจะถูกปฏิเสธทันที
2. การควบคุมระดับเครือข่าย (Port & Network Security)
การปิด Port ที่ไม่ได้ใช้งาน (Port Closing) เป็นการป้องกันที่ระดับระบบปฏิบัติการ (OS Level) ไม่ใช่ระดับ PostgreSQL โดยตรง ดังนั้นเราต้องใช้ Firewall (เช่น iptables หรือ Security Group ใน Cloud) เพื่อเปิดเฉพาะ Port 5432 (หรือ Port ที่กำหนด) ให้กับ IP ที่จำเป็นเท่านั้น
นอกจากนี้ เราควรตั้งค่า PostgreSQL ให้รับฟังการเชื่อมต่อเฉพาะจาก IP ที่กำหนด (เช่น listen_addresses) เพื่อป้องกันการถูกสแกนจากภายนอก:
SQL
listen_addresses = '192.168.1.10'
3. หลักการสิทธิ์ขั้นต่ำสุด (Principle of Least Privilege)
นี่คือการจำกัดขอบเขตการทำงานของสิทธิ์ (Schema/Function Restriction) เพื่อให้ผู้ใช้แต่ละคนมีสิทธิ์ทำได้แค่สิ่งที่จำเป็นต่อการทำงานเท่านั้น (Need-to-Know Basis) ไม่ใช่แค่การกำหนด User Role แต่ต้องกำหนดสิทธิ์ที่ละเอียดถึงระดับฟังก์ชัน (Function) และตาราง (Table) ด้วย
ตัวอย่างการจำกัดสิทธิ์ให้ User ‘app_user’ สามารถอ่านข้อมูลได้เฉพาะตาราง ‘product’ เท่านั้น:
SQL
-- 1. ให้สิทธิ์ในการ SELECT เท่านั้น
GRANT SELECT ON TABLE product TO app_user;
-- 2. ป้องกันการลบหรือแก้ไขข้อมูลโดยไม่จำเป็น
REVOKE DELETE ON TABLE product FROM app_user;
✅ บทสรุป: สร้างเกราะป้องกันที่สมบูรณ์
การรักษาความปลอดภัยของ PostgreSQL ที่สมบูรณ์แบบต้องอาศัยการทำงานร่วมกันของทั้งสามชั้น: Firewall (ควบคุม Port), pg_hba.conf (ควบคุม Source IP), และ SQL Permissions (ควบคุมสิทธิ์การใช้งาน) การทำตามหลักการเหล่านี้จะช่วยลดความเสี่ยงและทำให้ฐานข้อมูลของคุณมีความทนทานต่อการโจมตีได้อย่างแท้จริง