PlusMagi's Blog By Pitt Phunsanit Cybersecurity,Database RBAC: (Role-Based Access Control)จัดการสิทธิ์แบบมือโปร ลดความปวดหัวของ Admin

RBAC: (Role-Based Access Control)จัดการสิทธิ์แบบมือโปร ลดความปวดหัวของ Admin

ในฐานะ System Architect ที่ต้องดูแลระบบฐานข้อมูลขนาดใหญ่ การจัดการสิทธิ์การเข้าถึง (Access Control) ถือเป็นหัวใจสำคัญของความปลอดภัยข้อมูล หากคุณเคยประสบปัญหาการต้องไล่แก้ไขสิทธิ์การเข้าถึง (Permissions) ให้พนักงานทีละคนเมื่อมีการเปลี่ยนแปลงตำแหน่งงาน นั่นคือสัญญาณว่าคุณกำลังใช้ระบบที่ล้าสมัย

RBAC (Role-Based Access Control) หรือการควบคุมการเข้าถึงตามบทบาทหน้าที่ คือมาตรฐานที่ถูกคิดค้นมาเพื่อแก้ปัญหานี้อย่างสมบูรณ์ โดยเปลี่ยนวิธีการมองสิทธิ์จาก ‘ผู้ใช้แต่ละคน’ ไปเป็น ‘บทบาทหน้าที่’ ทำให้การบริหารจัดการสิทธิ์ทั้งระบบเป็นไปอย่างเป็นระเบียบ มีโครงสร้าง และที่สำคัญคือลดความผิดพลาดของมนุษย์ (Human Error) ได้อย่างมาก

ทำไมระบบสิทธิ์แบบเดิม (ACL) ถึงไม่เพียงพอ?

ในระบบแบบเก่า (Discretionary Access Control หรือ ACL) การกำหนดสิทธิ์จะผูกติดกับตัวบุคคลโดยตรง เช่น: 'นาย A สามารถอ่านไฟล์บัญชีได้' หากนาย A ลาออก หรือมีการเปลี่ยนตำแหน่งงานของนาย A คุณจะต้องเข้าไปลบสิทธิ์ของนาย A ออกจากทุกตารางและทุกโฟลเดอร์ที่เกี่ยวข้อง ซึ่งเป็นงานที่ซับซ้อนและเสี่ยงต่อการผิดพลาดสูง

ยิ่งองค์กรมีพนักงานจำนวนมากและมีบทบาทหน้าที่ที่หลากหลาย การจัดการสิทธิ์ด้วยวิธีนี้จะกลายเป็นภาระที่หนักอึ้งและไม่สามารถขยายตัวได้ (Non-Scalable) เมื่อเทียบกับแนวคิดของ RBAC ที่ให้เรากำหนดสิทธิ์เพียงครั้งเดียว แล้วผูกสิทธิ์นั้นเข้ากับบทบาทหน้าที่แทน

หลักการทำงานของ RBAC ใน PostgreSQL

RBAC ทำงานโดยการสร้างชั้นการกำกับดูแลสิทธิ์ (Layered Security) โดยมีลำดับดังนี้: สิทธิ์ (Permission) $\rightarrow$ บทบาท (Role) $\rightarrow$ ผู้ใช้ (User)

แทนที่เราจะให้สิทธิ์ SELECT บนตาราง accounts แก่นาย B โดยตรง เราจะทำดังนี้: 1) สร้างบทบาทชื่อ analyst_role 2) ให้สิทธิ์ SELECT บนตาราง accounts แก่ analyst_role 3) กำหนดให้ผู้ใช้ john_user เป็นสมาชิกของ analyst_role

เมื่อนาย B (john_user) ลาออก เราเพียงแค่ลบสิทธิ์ของบทบาท analyst_role ออกจากผู้ใช้รายนั้นเท่านั้น ไม่ต้องไปแตะต้องสิทธิ์ของบทบาทอื่น ๆ ที่ยังคงใช้งานอยู่

ตัวอย่างการจัดการสิทธิ์ด้วย PostgreSQL

ใน PostgreSQL เราใช้คำสั่ง CREATE ROLE และ GRANT เพื่อจำลองหลักการ RBAC นี้:

SQL

-- 1. สร้างบทบาท (Roles) ที่เป็นตัวแทนของหน้าที่งานต่างๆ<br>CREATE ROLE analyst_role;<br>CREATE ROLE manager_role;<br><br>-- 2. กำหนดสิทธิ์ (Permissions) ให้กับบทบาท (Role)<br>-- ให้ analyst_role มีสิทธิ์ SELECT บนตาราง employees<br>GRANT SELECT ON employees TO analyst_role;<br>-- ให้ manager_role มีสิทธิ์ SELECT และ INSERT บนตาราง payroll<br>GRANT SELECT, INSERT ON payroll TO manager_role;<br><br>-- 3. สร้างผู้ใช้ (User) และกำหนดบทบาทให้ผู้ใช้นั้น<br>CREATE USER john_user WITH PASSWORD 'securepass';<br>-- กำหนดให้ john_user เป็นสมาชิกของ analyst_role<br>GRANT analyst_role TO john_user;<br>-- หาก john_user ได้รับการเลื่อนตำแหน่ง ก็แค่ใช้คำสั่งนี้<br>GRANT manager_role TO john_user;

บทสรุป: ประโยชน์ของ RBAC ในการพัฒนาแอปพลิเคชัน

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