본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

การจัดการ Role และสิทธิ์การเข้าถึง (Permissions)

บทความนี้กล่าวถึงการจัดการ Role และสิทธิ์การเข้าถึง (Permissions) ใน PostgreSQL ซึ่งเป็นสิ่งสำคัญในการรักษาความปลอดภัยของฐานข้อมูล โดยอธิบายถึงการสร้างและจัดการ...

การจัดการ Role และสิทธิ์การเข้าถึง (Permissions) ใน PostgreSQL

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

Role คืออะไร?

ใน PostgreSQL, Role คือ entity ที่สามารถเป็นเจ้าของ objects ในฐานข้อมูล (เช่น ตาราง, views, sequences) และสามารถมีสิทธิ์การเข้าถึง objects เหล่านั้นได้ Role สามารถเป็นได้ทั้ง:

  • User: Role ที่สามารถ login เข้าสู่ฐานข้อมูลได้ (โดยทั่วไปคือผู้ใช้งาน)
  • Group: Role ที่ใช้เพื่อจัดกลุ่ม users และให้สิทธิ์การเข้าถึงร่วมกัน (ไม่สามารถ login ได้โดยตรง)

การแยก Role ออกเป็น User และ Group ช่วยให้การจัดการสิทธิ์การเข้าถึงง่ายขึ้น เมื่อมีผู้ใช้งานใหม่ เราเพียงแค่เพิ่มผู้ใช้งานนั้นเข้าสู่ Group ที่เหมาะสม สิทธิ์การเข้าถึงก็จะถูกถ่ายทอดไปยังผู้ใช้งานใหม่โดยอัตโนมัติ

การสร้าง Role

เราสามารถสร้าง Role ได้โดยใช้คำสั่ง CREATE ROLE ใน psql หรือเครื่องมือจัดการฐานข้อมูลอื่นๆ

-- สร้าง User Role ชื่อ 'john' พร้อม password
CREATE ROLE john WITH LOGIN PASSWORD 'secure_password';

-- สร้าง Group Role ชื่อ 'developers'
CREATE ROLE developers;

คำอธิบาย:

  • CREATE ROLE john: สร้าง Role ชื่อ 'john'
  • WITH LOGIN: ระบุว่า Role นี้สามารถ login เข้าสู่ฐานข้อมูลได้
  • PASSWORD 'secure_password': กำหนด password สำหรับ Role นี้ (ควรใช้ password ที่แข็งแกร่ง)
  • CREATE ROLE developers: สร้าง Role ชื่อ 'developers' ซึ่งในกรณีนี้เป็น Group Role (โดย default จะไม่สามารถ login ได้)

เหตุผลเชิงออกแบบ:

  • การกำหนด password ให้กับ User Role เป็นสิ่งจำเป็นเพื่อความปลอดภัย หากไม่มี password ใครก็ตามที่รู้ username สามารถเข้าถึงฐานข้อมูลได้
  • การใช้ Group Role ช่วยลดความซ้ำซ้อนในการกำหนดสิทธิ์การเข้าถึง หากมีผู้ใช้งานหลายคนที่ต้องการสิทธิ์เดียวกัน เราสามารถกำหนดสิทธิ์ให้กับ Group Role แล้วเพิ่มผู้ใช้งานเหล่านั้นเข้าสู่ Group แทนที่จะต้องกำหนดสิทธิ์ให้กับผู้ใช้งานแต่ละคน

การกำหนดสิทธิ์การเข้าถึง (Permissions)

PostgreSQL ใช้คำสั่ง GRANT และ REVOKE เพื่อจัดการสิทธิ์การเข้าถึง objects ในฐานข้อมูล สิทธิ์การเข้าถึงต่างๆ ได้แก่:

  • SELECT: อนุญาตให้อ่านข้อมูลจากตารางหรือ view
  • INSERT: อนุญาตให้เพิ่มข้อมูลใหม่ลงในตาราง
  • UPDATE: อนุญาตให้แก้ไขข้อมูลในตาราง
  • DELETE: อนุญาตให้ลบข้อมูลออกจากตาราง
  • USAGE: อนุญาตให้ใช้ sequence หรือ function
  • CREATE: อนุญาตให้สร้าง objects ใหม่ (เช่น ตาราง, view)
  • CONNECT: อนุญาตให้เชื่อมต่อกับฐานข้อมูล
  • TEMPORARY หรือ TEMP: อนุญาตให้สร้าง temporary tables
  • EXECUTE: อนุญาตให้ execute function หรือ procedure
  • ALL PRIVILEGES: อนุญาตให้ทำทุกอย่าง (สิทธิ์สูงสุด)

ตัวอย่างการใช้งาน:

-- ให้สิทธิ์ SELECT บนตาราง 'products' แก่ User Role 'john'
GRANT SELECT ON TABLE products TO john;

-- ให้สิทธิ์ INSERT, UPDATE, DELETE บนตาราง 'orders' แก่ Group Role 'developers'
GRANT INSERT, UPDATE, DELETE ON TABLE orders TO developers;

-- ให้สิทธิ์ USAGE บน sequence 'product_id_seq' แก่ User Role 'john'
GRANT USAGE ON SEQUENCE product_id_seq TO john;

-- ยกเลิกสิทธิ์ SELECT บนตาราง 'products' จาก User Role 'john'
REVOKE SELECT ON TABLE products FROM john;

คำอธิบาย:

  • GRANT SELECT ON TABLE products TO john: ให้สิทธิ์ SELECT บนตาราง products แก่ User Role john
  • GRANT INSERT, UPDATE, DELETE ON TABLE orders TO developers: ให้สิทธิ์ INSERT, UPDATE, และ DELETE บนตาราง orders แก่ Group Role developers
  • REVOKE SELECT ON TABLE products FROM john: ยกเลิกสิทธิ์ SELECT บนตาราง products จาก User Role john

เหตุผลเชิงออกแบบ:

  • การให้สิทธิ์เฉพาะที่จำเป็น (principle of least privilege) เป็นแนวทางปฏิบัติที่ดีในการรักษาความปลอดภัยของฐานข้อมูล ไม่ควรให้สิทธิ์ ALL PRIVILEGES กับ Role ใดๆ หากไม่จำเป็น
  • การใช้ Group Role ช่วยให้การจัดการสิทธิ์ง่ายขึ้น และลดข้อผิดพลาดที่อาจเกิดขึ้นจากการกำหนดสิทธิ์ให้กับผู้ใช้งานแต่ละคน

การจัดการ Role

เราสามารถแก้ไข Role ได้โดยใช้คำสั่ง ALTER ROLE

-- เปลี่ยน password ของ User Role 'john'
ALTER ROLE john WITH PASSWORD 'new_secure_password';

-- เพิ่ม User Role 'john' เข้าสู่ Group Role 'developers'
GRANT developers TO john;

-- ลบ User Role 'john' ออกจาก Group Role 'developers'
REVOKE developers FROM john;

-- เปลี่ยน superuser status ของ Role
ALTER ROLE john WITH SUPERUSER; -- ให้สิทธิ์ superuser
ALTER ROLE john WITH NOSUPERUSER; -- ยกเลิกสิทธิ์ superuser

คำอธิบาย:

  • ALTER ROLE john WITH PASSWORD 'new_secure_password': เปลี่ยน password ของ User Role john
  • GRANT developers TO john: เพิ่ม User Role john เข้าสู่ Group Role developers
  • REVOKE developers FROM john: ลบ User Role john ออกจาก Group Role developers
  • ALTER ROLE john WITH SUPERUSER: ให้สิทธิ์ superuser แก่ User Role john (ข้อควรระวัง: ควรให้สิทธิ์นี้เฉพาะ Role ที่จำเป็นเท่านั้น)
  • ALTER ROLE john WITH NOSUPERUSER: ยกเลิกสิทธิ์ superuser จาก User Role john

เหตุผลเชิงออกแบบ:

  • การเปลี่ยน password เป็นประจำช่วยลดความเสี่ยงจากการถูกโจมตี
  • การเพิ่ม/ลบ User Role ออกจาก Group Role เป็นวิธีที่ง่ายและมีประสิทธิภาพในการจัดการสิทธิ์การเข้าถึง
  • การให้สิทธิ์ superuser ควรทำด้วยความระมัดระวัง เนื่องจาก Role ที่มีสิทธิ์นี้สามารถทำทุกอย่างในฐานข้อมูลได้

แนวปฏิบัติที่ดีในการจัดการ Role และ Permissions

  • Principle of Least Privilege: ให้สิทธิ์เฉพาะที่จำเป็นเท่านั้น
  • ใช้ Group Roles: จัดกลุ่ม users และให้สิทธิ์ผ่าน Group Roles
  • ตรวจสอบสิทธิ์เป็นประจำ: ตรวจสอบสิทธิ์การเข้าถึงและปรับปรุงตามความจำเป็น
  • ใช้ Role ที่มีสิทธิ์ superuser อย่างระมัดระวัง: ให้สิทธิ์ superuser เฉพาะ Role ที่จำเป็นเท่านั้น
  • บันทึกการเปลี่ยนแปลงสิทธิ์: บันทึกการเปลี่ยนแปลงสิทธิ์การเข้าถึงเพื่อตรวจสอบย้อนหลัง
  • ตั้งชื่อ Role ให้สื่อความหมาย: ทำให้ง่ายต่อการเข้าใจบทบาทและหน้าที่ของ Role
  • ใช้ password ที่แข็งแกร่ง: สำหรับ User Roles ที่สามารถ login ได้

สรุป:

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

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기