PlusMagi's Blog By Pitt Phunsanit Backend,Database ความปลอดภัยและสิทธิ์ในการร้องขอ (Authentication, Authorization, API Keys, Data Privacy)

ความปลอดภัยและสิทธิ์ในการร้องขอ (Authentication, Authorization, API Keys, Data Privacy)

“>

ในฐานะที่ข้อมูลคือสินทรัพย์ที่มีมูลค่าสูงสุด การรักษาความปลอดภัยของระบบฐานข้อมูลจึงเป็นข้อบังคับทางธุรกิจ (Business Mandate) สำหรับองค์กรที่ใช้ PostgreSQL การทำความเข้าใจกลไกด้านความปลอดภัยอย่างลึกซึ้ง ตั้งแต่การพิสูจน์ตัวตน (Authentication) การกำหนดสิทธิ์ (Authorization) ไปจนถึงการควบคุมระดับแถวข้อมูล (Row-Level Security) เป็นสิ่งจำเป็นอย่างยิ่ง เพื่อให้มั่นใจว่าข้อมูลจะถูกเข้าถึงและใช้งานโดยผู้ที่ได้รับอนุญาตเท่านั้น

🔑 PostgreSQL Security: 3 เสาหลักแห่งการป้องกันข้อมูล

1. Authentication: การพิสูจน์ตัวตน (Who are you?)

“>

Authentication คือขั้นตอนแรกสุดที่ PostgreSQL ใช้ในการยืนยันตัวตนของผู้ที่พยายามเชื่อมต่อระบบ ระบบนี้อาศัยการกำหนด Role และ User ที่ชัดเจน เมื่อผู้ใช้พยายามเชื่อมต่อ ระบบจะตรวจสอบว่าผู้ใช้นั้นมีตัวตนจริงและมีรหัสผ่านที่ถูกต้องหรือไม่ การจัดการผู้ใช้ที่ถูกต้องจึงเป็นรากฐานของการรักษาความปลอดภัยทั้งหมด

2. Authorization: การกำหนดสิทธิ์ (What can you do?)

“>

Authorization คือการกำหนดขอบเขตการเข้าถึงข้อมูล (Permissions) ว่าผู้ใช้ที่พิสูจน์ตัวตนแล้ว (Authenticated User) นั้นมีสิทธิ์ทำอะไรได้บ้าง เช่น สิทธิ์ในการอ่าน (SELECT), เขียน (INSERT), อัปเดต (UPDATE) หรือลบ (DELETE) การใช้คำสั่ง GRANT และ REVOKE เป็นหัวใจสำคัญของกระบวนการนี้

3. Data Privacy: การควบคุมระดับแถว (Row-Level Security – RLS)

“>

สำหรับข้อมูลที่ละเอียดอ่อน การกำหนดสิทธิ์แค่ระดับตารางอาจไม่เพียงพอ PostgreSQL จึงมีฟีเจอร์ Row-Level Security (RLS) ซึ่งช่วยให้คุณสามารถกำหนดนโยบาย (Policy) ว่าผู้ใช้คนใดสามารถเห็นข้อมูลแถวใดได้บ้าง โดยไม่จำเป็นต้องเขียนโค้ดในแอปพลิเคชัน ทำให้เกิดความปลอดภัยในระดับฐานข้อมูล (Database Layer) โดยตรง

4. API Keys และ Service Roles

“>

เมื่อมีการเชื่อมต่อจากบริการภายนอก (เช่น API) ไม่ควรใช้ User หลักในการเชื่อมต่อ แต่ควรสร้าง Service Role ที่มีสิทธิ์จำกัดเฉพาะงานที่จำเป็น (Principle of Least Privilege) Role เหล่านี้ทำหน้าที่คล้ายกับ API Key ที่ถูกควบคุมด้วยสิทธิ์ของฐานข้อมูลโดยตรง

SQL

-- 1. Authentication: สร้าง Role สำหรับผู้ใช้งานภายนอก (User) และกำหนดรหัสผ่าน<br>CREATE ROLE external_user LOGIN PASSWORD 'secure_pass';<br><br>-- 2. Authorization: ให้สิทธิ์เฉพาะการ SELECT บนตาราง 'products' เท่านั้น<br>GRANT SELECT ON products TO external_user;<br><br>-- 3. Data Privacy: สร้าง Policy เพื่อจำกัดการเห็นข้อมูลตาม user_id<br>CREATE POLICY user_view_policy ON sensitive_data FOR SELECT TO external_user USING (user_id = current_setting('app.current_user_id')::integer);<br><br>-- 4. Service Role: สร้าง Role สำหรับ API ที่มีสิทธิ์จำกัดที่สุด<br>CREATE ROLE api_service_role LOGIN PASSWORD 'api_key_pass';<br>GRANT SELECT ON inventory TO api_service_role;<br>ALTER ROLE api_service_role NOLOGIN;
“>

การผสมผสานกลไกเหล่านี้ทำให้เกิดระบบความปลอดภัยแบบหลายชั้น (Layered Security) ที่แข็งแกร่ง ทำให้ข้อมูลของคุณได้รับการปกป้องอย่างสูงสุด

บทสรุป: การรักษาความปลอดภัยที่ยั่งยืน

“>

การรักษาความปลอดภัยใน PostgreSQL ไม่ใช่เพียงการตั้งรหัสผ่านที่ซับซ้อน แต่คือการใช้หลักการ Least Privilege อย่างเคร่งครัด โดยการแยก Authentication, Authorization, และการใช้ RLS เพื่อควบคุมการเข้าถึงข้อมูลในทุกระดับ การทำความเข้าใจกลไกเหล่านี้จะช่วยให้องค์กรของคุณสามารถสร้างสถาปัตยกรรมข้อมูลที่ปลอดภัยและสอดคล้องกับข้อกำหนดด้านความเป็นส่วนตัว (Data Privacy) ได้อย่างยั่งยืน