PlusMagi's Blog By Pitt Phunsanit Database Authentication, Authorization & Security (ระบบล็อกอิน การกำหนดสิทธิ์การเข้าถึงด้วย AuthorizeView)

Authentication, Authorization & Security (ระบบล็อกอิน การกำหนดสิทธิ์การเข้าถึงด้วย AuthorizeView)

ในโลกดิจิทัลที่ข้อมูลคือสินทรัพย์หลัก การรักษาความปลอดภัยของระบบฐานข้อมูลจึงเป็นภารกิจที่สำคัญที่สุด ระบบ PostgreSQL ไม่ได้เพียงแค่เก็บข้อมูล แต่ยังต้องรับประกันว่าข้อมูลเหล่านั้นจะถูกเข้าถึงโดยผู้ที่ได้รับอนุญาตเท่านั้น การทำความเข้าใจหลักการ Authentication, Authorization และ Security จึงเป็นหัวใจสำคัญสำหรับ Senior Architect ทุกคน

หลักการพื้นฐานของความมั่นคงปลอดภัย (AAA Model)

ความมั่นคงปลอดภัยของระบบฐานข้อมูลจะถูกจัดการภายใต้โมเดล AAA (Authentication, Authorization, Accounting) ซึ่งเป็นแนวคิดที่ต้องแยกออกจากกันอย่างชัดเจน:

1. Authentication (AuthN): พิสูจน์ตัวตน

คือการตอบคำถามว่า “คุณคือใคร?” ในบริบทของ PostgreSQL คือการที่ผู้ใช้เชื่อมต่อระบบด้วยชื่อผู้ใช้ (User/Role) และรหัสผ่านที่ถูกต้อง การพิสูจน์ตัวตนที่แข็งแกร่ง เช่น การใช้ Multi-Factor Authentication (MFA) จะช่วยเพิ่มความปลอดภัยในชั้นนี้

2. Authorization (AuthZ): กำหนดสิทธิ์

คือการตอบคำถามว่า “คุณได้รับอนุญาตให้ทำอะไรได้บ้าง?” นี่คือส่วนที่ PostgreSQL ใช้ระบบ Role-Based Access Control (RBAC) ซึ่งอนุญาตให้เรากำหนดสิทธิ์ระดับตาราง (Table), คอลัมน์ (Column), หรือแม้แต่การเรียกใช้ฟังก์ชัน (Function) โดยเฉพาะการใช้ View หรือ Stored Procedure เพื่อจำกัดการมองเห็นข้อมูล (Data Masking) คือตัวอย่างที่ทรงพลังที่สุดของ AuthZ

3. Accounting: การบันทึกกิจกรรม

คือการบันทึกว่า “คุณทำอะไรไปบ้าง?” ระบบจะบันทึก Log การเข้าถึงและการดำเนินการทั้งหมด เพื่อใช้ในการตรวจสอบ (Audit) หากเกิดเหตุการณ์ผิดปกติ

การควบคุมสิทธิ์ใน PostgreSQL ด้วย Role และ View

ใน PostgreSQL เราใช้คำสั่ง CREATE ROLE และ GRANT เพื่อจัดการ AuthZ อย่างเป็นระบบ เพื่อจำลองการทำงานของ AuthorizeView เราสามารถสร้าง View ที่ถูกจำกัดสิทธิ์การเข้าถึงข้อมูลบางส่วน หรือจำกัดการมองเห็นข้อมูลตามบทบาทของผู้ใช้งานได้

สมมติว่าเรามีตารางข้อมูลพนักงาน (employees) และต้องการให้ผู้ใช้ระดับ ‘Viewer’ เห็นได้เฉพาะชื่อและแผนก แต่ไม่เห็นเงินเดือน:

SQL

-- 1. สร้างตารางหลัก (The Source of Truth) --
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    full_name VARCHAR(100),
    department VARCHAR(50),
    salary NUMERIC
);

-- 2. ใส่ข้อมูลตัวอย่าง --
INSERT INTO employees (employee_id, full_name, department, salary) VALUES
(101, 'Alice', 'HR', 60000.00);

-- 3. สร้าง View เพื่อจำกัดการเข้าถึงข้อมูล (The AuthorizeView Logic) --
-- View นี้จะจำกัดคอลัมน์ salary ไม่ให้ผู้ใช้ทั่วไปเห็น
CREATE VIEW authorized_employee_view AS
SELECT employee_id, full_name, department
FROM employees;

-- 4. กำหนดสิทธิ์ (Authorization) --
-- ให้ Role 'viewer' เห็นเฉพาะ View ที่ปลอดภัยเท่านั้น
GRANT SELECT ON authorized_employee_view TO viewer;

-- ห้ามให้ Role 'viewer' เข้าถึงตารางหลักโดยตรง
REVOKE ALL ON employees FROM viewer;

ด้วยการดำเนินการนี้ แม้ว่าผู้ใช้ ‘viewer’ จะมีสิทธิ์ในการ Query ข้อมูล แต่พวกเขาก็จะถูกจำกัดให้เห็นเฉพาะข้อมูลผ่าน `authorized_employee_view` เท่านั้น ทำให้เกิดการบังคับใช้หลักการ Principle of Least Privilege (PoLP) อย่างสมบูรณ์

บทสรุป: การป้องกันแบบหลายชั้น

การรักษาความปลอดภัยใน PostgreSQL ไม่ใช่การติดตั้งระบบใดระบบหนึ่ง แต่คือการสร้างระบบป้องกันแบบหลายชั้น (Defense in Depth) ตั้งแต่การพิสูจน์ตัวตนที่เข้มงวด (AuthN) การจำกัดสิทธิ์การเข้าถึงข้อมูลอย่างละเอียดผ่าน View และ Role (AuthZ) ไปจนถึงการตรวจสอบกิจกรรมทั้งหมด (Accounting) การใช้ View เพื่อเป็น AuthorizeView จึงเป็นเครื่องมือทางสถาปัตยกรรมที่สำคัญที่สุดในการรับประกันว่าข้อมูลที่ละเอียดอ่อนจะถูกปกป้องอย่างสูงสุด

Exit mobile version