PlusMagi's Blog By Pitt Phunsanit Backend,Database MySQL, MariaDB สร้าง user, สิทธิ์, Database

MySQL, MariaDB สร้าง user, สิทธิ์, Database

ในฐานะ Senior Architect ที่ดูแลระบบฐานข้อมูล ระบบความปลอดภัยและการจัดการสิทธิ์ (Permissions Management) ถือเป็นหัวใจสำคัญที่สุดของการพัฒนาแอปพลิเคชันที่เชื่อถือได้ ไม่ว่าคุณจะใช้ MySQL, MariaDB หรือ PostgreSQL การกำหนดสิทธิ์ที่ถูกต้องให้กับผู้ใช้งาน (Users) และฐานข้อมูล (Databases) เป็นขั้นตอนที่ขาดไม่ได้

บทความนี้จะเจาะลึกขั้นตอนการสร้าง User, การสร้าง Database, และการกำหนดสิทธิ์อย่างละเอียด โดยเน้นไปที่ไวยากรณ์และแนวปฏิบัติที่ดีที่สุดของ PostgreSQL ซึ่งเป็นระบบฐานข้อมูลที่ได้รับความนิยมสูงในกลุ่มนักพัฒนาที่ต้องการความยืดหยุ่นและความปลอดภัยระดับ Enterprise

🔑 หลักการพื้นฐานของ PostgreSQL Permissions

ก่อนที่เราจะลงมือเขียนโค้ด สิ่งสำคัญที่ต้องทำความเข้าใจคือแนวคิดของ PostgreSQL: Role (บทบาท) คือแนวคิดหลักที่รวม User และ Group เข้าด้วยกัน การสร้าง User จึงเท่ากับการสร้าง Role ที่มีสิทธิ์เข้าถึงระบบ การจัดการสิทธิ์ใน PostgreSQL จะใช้คำสั่ง GRANT และ REVOKE เพื่อควบคุมการเข้าถึงในระดับ DATABASE, SCHEMA, และ TABLE

🛠️ ขั้นตอนการสร้าง User, Database และสิทธิ์ด้วย SQL

เราจะใช้สคริปต์ SQL ชุดนี้เพื่อสร้างผู้ใช้งานใหม่, สร้างฐานข้อมูล, และมอบสิทธิ์ที่จำเป็นตามหลักการ Principle of Least Privilege (การให้สิทธิ์เท่าที่จำเป็นเท่านั้น)

SQL

-- =========================================================================
-- PostgreSQL Setup Script: User, Database, and Permissions
-- =========================================================================

-- 1. 🚀 CONFIGURATION (กำหนดตัวแปรหรือชื่อที่ต้องการ)
SET @DB_USER = 'app_service_user';
SET @DB_PASS = 'StrongP@ssword123';
SET @DB_NAME = 'production_app_db';

-- 2. 👤 Create User (สร้าง Role/User ใหม่)
-- คำสั่งนี้สร้างผู้ใช้และกำหนดรหัสผ่าน
CREATE USER @DB_USER WITH PASSWORD '@DB_PASS';

-- 3. 💾 Create Database (สร้างฐานข้อมูล)
-- และกำหนดให้ User ที่สร้างขึ้นเป็นเจ้าของฐานข้อมูลนั้นทันที
CREATE DATABASE @DB_NAME OWNER @DB_USER;

-- 4. 🛡️ Grant Global Permissions (มอบสิทธิ์การเข้าถึงฐานข้อมูล)
-- ให้สิทธิ์การเชื่อมต่อและสร้าง Schema พื้นฐาน
GRANT CONNECT ON DATABASE @DB_NAME TO @DB_USER;

-- 5. 📝 Grant Schema/Table Permissions (มอบสิทธิ์ระดับ Schema/Table)
-- สมมติว่าเรามี Schema ชื่อ 'public' และต้องการให้สิทธิ์ SELECT, INSERT, UPDATE, DELETE
-- ใน Schema นี้
GRANT ALL PRIVILEGES ON SCHEMA public TO @DB_USER;

-- (ตัวอย่างการให้สิทธิ์เฉพาะตาราง) 
-- หากต้องการให้สิทธิ์เฉพาะตาราง 'users' ใน Schema 'public'
GRANT SELECT, INSERT, UPDATE, DELETE ON public.users TO @DB_USER;

-- 6. ✨ Finalization (ยืนยันการเปลี่ยนแปลงสิทธิ์)
-- ใน PostgreSQL คำสั่งนี้อาจไม่จำเป็นเท่า MySQL แต่เป็นการยืนยันที่ดี

-- 7. 🔍 Verification (ตรวจสอบผู้ใช้และสิทธิ์)

-- ตรวจสอบว่า User ถูกสร้างแล้วหรือไม่

-- ตรวจสอบสิทธิ์ที่ User มี

💡 แนวทางปฏิบัติที่ดีที่สุด (Best Practices)

การจัดการสิทธิ์ที่ดีต้องยึดหลักการ Principle of Least Privilege (PoLP) เสมอ นั่นคือ User ควรได้รับสิทธิ์เท่าที่จำเป็นในการทำงานเท่านั้น ไม่ควรใช้ GRANT ALL PRIVILEGES เว้นแต่จะเป็นการตั้งค่าระบบครั้งแรก

  • การแยกสิทธิ์ (Separation of Concerns): อย่าให้ User เดียวมีสิทธิ์ทั้งการสร้าง User (Superuser) และการเข้าถึงข้อมูล (Application User)
  • ใช้ Roles: ใช้ Roles ในการจัดกลุ่มสิทธิ์ เช่น Role ‘read_only’ และ Role ‘data_editor’ เพื่อให้การจัดการสิทธิ์เป็นระเบียบ
  • การเข้ารหัสรหัสผ่าน: ในสภาพแวดล้อมจริง ควรใช้ระบบจัดการรหัสผ่าน (Password Vault) และไม่ควร Hardcode รหัสผ่านในสคริปต์

✅ บทสรุป

การสร้างระบบฐานข้อมูลที่ปลอดภัยเริ่มต้นจากการกำหนดสิทธิ์ที่ชัดเจน การใช้ PostgreSQL ร่วมกับคำสั่ง CREATE USER, CREATE DATABASE, และ GRANT อย่างถูกต้อง จะช่วยให้คุณสร้างโครงสร้างพื้นฐานที่แข็งแกร่งและปลอดภัยตามมาตรฐานระดับสถาปนิกมืออาชีพ การทำความเข้าใจขอบเขตของสิทธิ์ (Scope) ในแต่ละคำสั่งจะช่วยป้องกันช่องโหว่ด้านความปลอดภัยได้อย่างมีประสิทธิภาพ

Exit mobile version