ในยุคที่ข้อมูลเป็นสินทรัพย์ที่มีค่าที่สุด การจัดเก็บไฟล์บน Network Attached Storage (NAS) จึงไม่ได้หมายถึงแค่การสำรองพื้นที่เท่านั้น แต่ยังรวมไปถึงกลไกในการรักษาความปลอดภัยของตัวข้อมูลด้วย แม้ว่า NAS จะใช้ระบบปฏิบัติการ (OS) ในการจัดการสิทธิ์ระดับไฟล์ (File Permission) แต่เมื่อข้อมูลเหล่านั้นถูกนำมาจัดเก็บและประมวลผลในระบบฐานข้อมูลอย่าง PostgreSQL นั้น การรักษาความปลอดภัยที่แท้จริงต้องอาศัยกลไกการควบคุมสิทธิ์ในระดับฐานข้อมูล (Database Level Access Control) เป็นหลัก
หลักการควบคุมสิทธิ์ใน PostgreSQL สำหรับข้อมูลบน NAS
PostgreSQL ใช้ระบบที่ซับซ้อนกว่า POSIX ทั่วไป โดยอาศัยแนวคิดของ Roles (บทบาท) และ Privileges (สิทธิ) เพื่อจำกัดว่าใคร (Role) สามารถทำอะไร (Privilege) กับทรัพยากรใด (Schema, Table, Column) ได้บ้าง การเข้าใจหลักการนี้จึงเป็นหัวใจสำคัญในการออกแบบสถาปัตยกรรมความปลอดภัยของข้อมูล
องค์ประกอบหลักของสิทธิ์การเข้าถึง
ระบบสิทธิ์ของ PostgreSQL แบ่งออกเป็น 3 ระดับหลักที่ต้องบริหารจัดการ:
- Roles: คือตัวแทนของผู้ใช้งาน (User) หรือกลุ่มผู้ใช้งาน (Group) ที่ถูกกำหนดสิทธิ์ต่างๆ
- Schemas: คือพื้นที่ตรรกะที่ใช้จัดกลุ่มวัตถุ (Objects) เช่น ตาราง (Tables) หรือ View
- Privileges: คือสิทธิในการดำเนินการ เช่น
SELECT(อ่าน),INSERT(เพิ่ม),UPDATE(แก้ไข),DELETE(ลบ), และUSAGE(ใช้งาน Schema)
การกำหนดและยกเลิกสิทธิ์ด้วย SQL
การจัดการสิทธิ์ทั้งหมดจะทำผ่านคำสั่ง SQL โดยใช้คำสั่ง GRANT เพื่อมอบสิทธิ์ และ REVOKE เพื่อถอดสิทธิ์ ตัวอย่างเช่น หากเราต้องการให้ Role ชื่อ ‘analyst’ สามารถอ่านข้อมูลจากตาราง ‘product_data’ ได้ แต่ไม่ให้แก้ไขใดๆ:
SQL
-- 1. สร้าง Role สำหรับผู้ใช้งาน (ถ้ายังไม่มี)
CREATE ROLE analyst;
-- 2. มอบสิทธิ์ในการอ่าน (SELECT) ให้ Role 'analyst' บนตาราง 'product_data'
GRANT SELECT ON TABLE product_data TO analyst;
-- 3. หากต้องการให้ Role นี้ใช้งาน Schema 'data_warehouse' ด้วย
GRANT USAGE ON SCHEMA data_warehouse TO analyst;
-- 4. การยกเลิกสิทธิ์ (เมื่อพนักงานลาออกหรือเปลี่ยนบทบาท)
REVOKE SELECT ON TABLE product_data FROM analyst;
การรักษาความปลอดภัยขั้นสูง: Row-Level Security (RLS)
สำหรับองค์กรขนาดใหญ่ที่ต้องการการควบคุมสิทธิ์ที่ละเอียดกว่าแค่ระดับตาราง (Table) PostgreSQL มีฟีเจอร์ที่เรียกว่า Row-Level Security (RLS) ซึ่งช่วยให้คุณสามารถกำหนดได้ว่า Role ใดสามารถเห็นข้อมูลแถว (Row) ใดได้บ้าง โดยไม่ต้องสร้างตารางสำรองหรือเพิ่มคอลัมน์สถานะ (Status Column) เข้าไปในตารางหลัก
RLS ทำงานโดยการกำหนด Policy ที่จะถูกตรวจสอบทุกครั้งที่มีการ Query ข้อมูล ทำให้มั่นใจได้ว่าผู้ใช้งานจะเห็นเฉพาะข้อมูลที่ได้รับอนุญาตเท่านั้น นี่คือการจำลองกลไก ACLs (Access Control Lists) ที่ทรงพลังที่สุดในระดับฐานข้อมูล
SQL
-- 1. เปิดใช้งาน RLS บนตารางเป้าหมาย
ALTER TABLE sensitive_data ENABLE ROW LEVEL SECURITY;
-- 2. สร้าง Policy: อนุญาตให้ Role 'manager' เห็นเฉพาะข้อมูลที่มาจากภูมิภาค 'TH' เท่านั้น
CREATE POLICY region_policy ON sensitive_data
FOR SELECT TO manager USING (region = 'TH');
บทสรุป
การกำหนดสิทธิ์การเข้าถึงข้อมูลบน NAS ที่ใช้ PostgreSQL ไม่ได้จบแค่การตั้งค่าสิทธิ์ระดับ OS เท่านั้น แต่ต้องมีการบริหารจัดการสิทธิ์ในระดับ Role, Schema, และ Table อย่างเคร่งครัด การใช้คำสั่ง GRANT และ REVOKE อย่างถูกต้อง ควบคู่ไปกับการใช้ฟีเจอร์ขั้นสูงอย่าง Row-Level Security จะช่วยสร้างชั้นความปลอดภัยข้อมูลที่แข็งแกร่งและเป็นไปตามหลักการ Zero Trust Architecture ได้อย่างสมบูรณ์