ป้ายกำกับ: Access Control

Role-Based Access Control (RBAC) & Principle of Least PrivilegeRole-Based Access Control (RBAC) & Principle of Least Privilege

ในยุคที่ข้อมูล (Data) คือสินทรัพย์ที่มีมูลค่าสูงสุด การรักษาความปลอดภัยของฐานข้อมูลจึงไม่ใช่แค่การติดตั้ง Firewall แต่คือการสร้างระบบควบคุมการเข้าถึง (Access Control) ที่ละเอียดและเข้มงวดที่สุด การจัดการสิทธิ์การเข้าถึงที่ผิดพลาด (Mismanagement of Permissions) ถือเป็นช่องโหว่ร้ายแรงที่ผู้โจมตีสามารถใช้ประโยชน์ได้ง่ายที่สุด หัวใจสำคัญของการป้องกันภัยคุกคุกคามทางไซเบอร์ในระบบ PostgreSQL คือการกำหนดขอบเขตอำนาจอย่างชัดเจนด้วยหลักการที่เรียกว่า Role-Based Access Control (RBAC) และ Principle of Least Privilege (PoLP)

RBAC และ PoLP คืออะไรในบริบทของ PostgreSQL?

การรักษาความปลอดภัยระดับสูงต้องอาศัยการผสานแนวคิดทั้งสองเข้าด้วยกัน:

  1. Role-Based Access Control (RBAC): คือการกำหนดสิทธิ์การเข้าถึงตามบทบาทหน้าที่ (Role) ของผู้ใช้ในองค์กร แทนที่จะให้สิทธิ์กับผู้ใช้แต่ละคนโดยตรง เราจะสร้างบทบาท เช่น ‘Accountant’ หรือ ‘Data Analyst’ แล้วมอบสิทธิ์เหล่านั้นให้กับบทบาทนั้นๆ ทำให้การบริหารจัดการสิทธิ์เป็นระเบียบและง่ายต่อการตรวจสอบ
  2. Principle of Least Privilege (PoLP): คือหลักการที่ระบุว่าผู้ใช้งาน (User) หรือแอปพลิเคชันควรได้รับสิทธิ์ในการเข้าถึงทรัพยากร (Resource) เท่าที่จำเป็นต่อการปฏิบัติงานเท่านั้น ห้ามให้สิทธิ์เกินความจำเป็นเด็ดขาด

เมื่อนำสองแนวคิดนี้มาใช้ร่วมกันใน PostgreSQL จะเกิดเป็นกลไกการป้องกันที่แข็งแกร่งมาก RBAC ช่วยจัดกลุ่มสิทธิ์ให้เป็นหมวดหมู่ ส่วน PoLP ทำหน้าที่เป็นตัวกรองขั้นสุดท้าย เพื่อจำกัดขอบเขตความเสียหาย (Blast Radius) หากบัญชีใดบัญชีหนึ่งถูกบุกรุก ผู้โจมตีก็จะทำได้แค่สิ่งที่จำเป็นจริงๆ เท่านั้น

การประยุกต์ใช้ใน PostgreSQL ด้วย SQL

PostgreSQL มีระบบ Role และ Permission ที่รองรับแนวคิดนี้อย่างสมบูรณ์แบบ เราสามารถใช้คำสั่ง SQL เพื่อสร้างบทบาทและจำกัดสิทธิ์ได้อย่างแม่นยำ:

1. การสร้างบทบาท (RBAC Example)

สมมติว่าเรามีระบบที่ต้องการแยกสิทธิ์ระหว่าง ‘Viewer’ (ดูข้อมูลเท่านั้น) และ ‘Editor’ (แก้ไขข้อมูลได้) เราจะสร้าง Role ขึ้นมาก่อน:

SQL

-- 1. สร้าง Role สำหรับบัญชีผู้ใช้ (User) และ Role สำหรับสิทธิ์ (Role) ที่เป็นกลุ่มงาน<br>CREATE ROLE data_viewer;<br>CREATE ROLE data_editor;<br><br>-- 2. กำหนดสิทธิ์พื้นฐานให้กับ Role (GRANT)<br>GRANT SELECT ON table_sales TO data_viewer;<br>GRANT SELECT, INSERT, UPDATE ON table_sales TO data_editor;<br><br>-- 3. มอบ Role ให้กับ User จริง<br>GRANT data_viewer TO user_alice;<br>GRANT data_editor TO user_bob;<%>

2. การบังคับใช้หลักการสิทธิ์น้อยที่สุด (PoLP Example)

แม้ว่า Role จะถูกกำหนดแล้ว แต่เราต้องมั่นใจว่า Role นั้นมีสิทธิ์เท่าที่จำเป็นเท่านั้น ตัวอย่างเช่น หาก ‘Data Analyst’ ต้องการดูข้อมูลลูกค้า (customer_data) แต่ไม่ควรมีสิทธิ์ลบตาราง (DROP) เราจะจำกัดสิทธิ์เฉพาะ `SELECT`:

SQL

-- 1. สร้าง Role สำหรับนักวิเคราะห์ข้อมูล<br>CREATE ROLE data_analyst;<br><br>-- 2. มอบสิทธิ์ SELECT เท่านั้น (PoLP) บนตารางลูกค้า<br>GRANT SELECT ON customer_data TO data_analyst;<br><br>-- 3. ตรวจสอบว่า Role นี้ไม่ได้รับสิทธิ์ที่เกินความจำเป็น (เช่น DROP หรือ DELETE)<br>-- (ไม่มีคำสั่ง GRANT DROP ON customer_data TO data_analyst;)<%>

บทสรุป: การป้องกันที่สมบูรณ์แบบ

การใช้ RBAC และ PoLP ร่วมกันใน PostgreSQL ไม่เพียงแต่ช่วยให้การบริหารจัดการสิทธิ์เป็นระเบียบเท่านั้น แต่ยังเป็นการสร้างเกราะป้องกันเชิงลึก (Defense in Depth) ที่ลดความเสี่ยงจากการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาตได้อย่างมีนัยสำคัญ การกำหนดสิทธิ์ที่ถูกต้องและจำกัดขอบเขตอำนาจอย่างเคร่งครัด จึงเป็นรากฐานสำคัญของการรักษาความปลอดภัยทางไซเบอร์สำหรับทุกองค์กรที่ใช้ PostgreSQL เป็นระบบหลัก