การบริหารจัดการข้อมูลในระบบขนาดใหญ่ ไม่ว่าจะเป็นข้อมูลผู้ใช้งาน ข้อมูลทรัพย์สิน หรือข้อมูลการทำธุรกรรม จำเป็นต้องมีกลไกทางกฎหมายและทางเทคนิคที่ชัดเจนเพื่อป้องกันการเข้าถึงหรือการเปลี่ยนแปลงข้อมูลโดยมิชอบ (Unauthorized Access) ในโลกของฐานข้อมูล PostgreSQL การทำความเข้าใจถึงขอบเขตอำนาจ (Scope of Authority) การกำหนดสิทธิ (Permissions) และบทบาท (Roles) ที่ถูกต้องตามหลักการออกแบบระบบ จึงเป็นรากฐานสำคัญของการดำรงระบบที่มั่นคงและเชื่อถือได้
ขอบเขตอำนาจ (Scope of Authority) ในการจัดการข้อมูล
ในเชิงกฎหมาย ขอบเขตอำนาจหมายถึงขีดจำกัดที่ผู้มีอำนาจสามารถตัดสินใจได้ ในทาง PostgreSQL เราจะจำลองขอบเขตอำนาจนี้ด้วยการใช้ Constraints และการกำหนดสิทธิ (GRANT/REVOKE) เพื่อให้แน่ใจว่าข้อมูลจะถูกป้อนหรือแก้ไขได้เฉพาะตามเงื่อนไขที่กำหนดเท่านั้น
การจำกัดความถูกต้องของข้อมูล (Constraints)
การกำหนด CHECK Constraint คือการกำหนดขอบเขตที่ข้อมูลต้องเป็นไปตามเงื่อนไขทางธุรกิจ (Business Logic) เสมอ ตัวอย่างเช่น หากสถานะการทำธุรกรรมต้องเป็น ‘Pending’, ‘Completed’, หรือ ‘Failed’ เท่านั้น:
SQL
CREATE TABLE transaction_status (
transaction_id SERIAL PRIMARY KEY,
status VARCHAR(50) NOT NULL CHECK (status IN ('Pending', 'Completed', 'Failed'));
);
การจัดการบทบาทและสิทธิ (Roles and Permissions)
การแต่งตั้งและถอดถอนผู้จัดการนิติบุคคลในโลกฐานข้อมูลคือการจัดการ Roles และ Permissions ผู้ใช้แต่ละคนควรได้รับสิทธิเท่าที่จำเป็นต่อการทำงานเท่านั้น (Principle of Least Privilege) การใช้ CREATE ROLE และ GRANT ช่วยให้เราจำลองการมอบอำนาจได้อย่างแม่นยำ
การจำกัดสิทธิการดำเนินการ
หากผู้จัดการคนหนึ่งมีสิทธิแค่ ‘อ่าน’ ข้อมูล แต่ไม่มีสิทธิ ‘แก้ไข’ หรือ ‘ลบ’ ข้อมูลสำคัญ:
SQL
-- 1. สร้าง Role สำหรับผู้ใช้งาน (จำลองผู้จัดการ)
CREATE ROLE manager_role;
-- 2. มอบสิทธิในการอ่าน (SELECT) เท่านั้น
GRANT SELECT ON building_info TO manager_role;
-- 3. ห้ามสิทธิในการแก้ไขหรือลบ (ไม่จำเป็นต้องระบุ แต่แสดงถึงการจำกัด)
-- REVOKE INSERT, UPDATE, DELETE ON building_info FROM manager_role;
การเป็นตัวแทนข้อมูล (Data Representation via Views)
ในกรณีที่ผู้ใช้ต้องเห็นข้อมูลรวมจากหลายตาราง แต่ไม่ควรเห็นรายละเอียดทั้งหมด (เช่น ตัวแทนที่เห็นเฉพาะชื่อและสถานะ แต่ไม่เห็นรหัสผ่าน) เราจะใช้ VIEW ซึ่งทำหน้าที่เป็นตัวแทนข้อมูลที่ถูกจำกัดขอบเขตแล้ว
SQL
CREATE VIEW public_public_view AS
SELECT
c.unit_name,
r.resident_name,
r.contact_info
FROM
residents r
JOIN
units u ON r.unit_id = u.unit_id
JOIN
building_info b ON u.building_id = b.building_id
WHERE
r.is_active = TRUE;
บทสรุป
การบริหารจัดการฐานข้อมูลที่ถูกต้องตามหลักการสถาปัตยกรรม (Architectural Best Practices) ไม่ได้จำกัดอยู่แค่การเขียน Query ที่ซับซ้อนเท่านั้น แต่รวมถึงการกำหนดขอบเขตอำนาจ การกำหนดบทบาท และการใช้กลไกทางเทคนิคอย่าง Constraints, Roles, และ Views เพื่อให้มั่นใจว่าระบบจะทำงานได้อย่างปลอดภัย โปร่งใส และสามารถตรวจสอบย้อนกลับได้เสมอ การทำความเข้าใจหลักการเหล่านี้จึงเป็นสิ่งสำคัญสำหรับ Senior Developer และ System Architect ทุกคน