ในฐานะสถาปนิกระบบและผู้เชี่ยวชาญด้านความปลอดภัยของฐานข้อมูล การจัดการสิทธิ์ (Permissions Management) ถือเป็นเสาหลักที่สำคัญที่สุดในการรักษาความสมบูรณ์และความลับของข้อมูล (Data Integrity and Confidentiality) แม้ว่าคำสั่ง chmod จะเป็นคำสั่งพื้นฐานในการจัดการสิทธิ์ไฟล์ในระบบปฏิบัติการ Unix-like OS แต่เมื่อเราทำงานในระดับฐานข้อมูลอย่าง PostgreSQL การควบคุมสิทธิ์จะถูกจัดการด้วยกลไกทางภาษา SQL โดยเฉพาะคำสั่ง GRANT และ REVOKE
บทความนี้จะเจาะลึกถึงหลักการทำงานของการกำหนดสิทธิ์ใน PostgreSQL ซึ่งเป็นแนวคิดเดียวกับการจำกัดสิทธิ์ของไฟล์ แต่ดำเนินการผ่านไวยากรณ์ของฐานข้อมูลโดยตรง
💡 หลักการทำงานของการควบคุมสิทธิ์ใน PostgreSQL
ใน PostgreSQL การกำหนดสิทธิ์จะไม่ได้จำกัดอยู่แค่การอ่าน (Read) หรือเขียน (Write) เท่านั้น แต่ยังรวมถึงการกำหนดว่าผู้ใช้งาน (Role) รายใดสามารถทำอะไรกับวัตถุ (Object) ใดได้บ้าง วัตถุเหล่านี้อาจเป็นตาราง (Tables), มุมมอง (Views), หรือแม้แต่ Schema
การทำงานของระบบสิทธิ์ใน PostgreSQL จะแบ่งออกเป็น 3 องค์ประกอบหลัก:
- Role (ผู้ใช้งาน/บทบาท): คือตัวตนที่ถูกกำหนดให้มีสิทธิ์ในการเข้าถึง เช่น ‘analyst’, ‘admin’ หรือผู้ใช้งานรายบุคคล
- Object (วัตถุ): คือทรัพยากรที่ต้องการปกป้อง เช่น ’employee_data’ (ตาราง) หรือ ‘public’ (Schema)
- Privilege (สิทธิ์): คือการกระทำที่อนุญาต เช่น
SELECT(อ่าน),INSERT(เพิ่มข้อมูล),UPDATE(แก้ไข), หรือDELETE(ลบ)
🛠️ การใช้คำสั่ง GRANT และ REVOKE (แทน chmod)
แทนที่จะใช้ chmod เพื่อเปลี่ยนสิทธิ์ระดับระบบไฟล์ เราจะใช้คำสั่ง SQL เพื่อควบคุมสิทธิ์ระดับฐานข้อมูล:
1. การให้สิทธิ์ (GRANT)
ใช้เพื่อมอบสิทธิ์ที่ต้องการให้กับ Role ที่ระบุ ตัวอย่างการให้สิทธิ์ให้ผู้ใช้ชื่อ ‘analyst’ สามารถอ่านข้อมูล (SELECT) จากตาราง ‘product_list’ ได้:
SQL
GRANT SELECT ON product_list TO analyst;
หากต้องการให้สิทธิ์ที่ครอบคลุมทุกตารางใน Schema ‘sales’ ให้กับ Role ‘reporting’ จะใช้คำสั่งดังนี้:
SQL
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA sales TO reporting;
2. การยกเลิกสิทธิ์ (REVOKE)
ใช้เพื่อถอดสิทธิ์ที่เคยให้ไปแล้วอย่างปลอดภัย หากผู้ใช้ ‘analyst’ ไม่ควรเข้าถึงตาราง ‘product_list’ อีกต่อไป:
SQL
REVOKE SELECT ON product_list FROM analyst;
✅ บทสรุป: แนวคิดเชิงสถาปัตยกรรม
การทำความเข้าใจว่า chmod ทำงานอย่างไรในระดับ OS ช่วยให้เราเข้าใจแนวคิดของ Permissions ได้อย่างลึกซึ้ง แต่ในมุมมองของ Senior Architect สำหรับ PostgreSQL เราต้องเปลี่ยนความคิดจากการจัดการสิทธิ์ไฟล์ (File System Permissions) ไปเป็นการจัดการสิทธิ์ระดับข้อมูล (Data Object Permissions) เสมอ
การใช้ GRANT และ REVOKE อย่างถูกต้องตามหลักการ Least Privilege (ให้สิทธิ์เท่าที่จำเป็นเท่านั้น) ไม่เพียงแต่เพิ่มความปลอดภัย แต่ยังเป็นรากฐานสำคัญของการออกแบบสถาปัตยกรรมฐานข้อมูลที่แข็งแกร่งและเชื่อถือได้