PlusMagi's Blog By Pitt Phunsanit Cybersecurity,Database NAS: การกำหนด File Permission

NAS: การกำหนด File Permission

ในยุคที่ข้อมูลเป็นสินทรัพย์ที่มีค่าที่สุด การจัดเก็บไฟล์บน 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 ได้อย่างสมบูรณ์