メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

การจัดการ User และ Permissions

บทความนี้กล่าวถึงการจัดการ User และ Permissions ใน MySQL ซึ่งมีความสำคัญต่อความปลอดภัยของข้อมูล โดยอธิบายถึงวิธีการสร้าง User ด้วย `CREATE USER`, การให้สิทธิ์ด้...

การจัดการ User และ Permissions ใน MySQL

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

การจัดการ User และ Permissions ใน MySQL มีความสำคัญอย่างยิ่งต่อความปลอดภัยของข้อมูล และเป็นพื้นฐานที่ผู้ดูแลระบบฐานข้อมูลทุกคนควรรู้

ทำไมต้องจัดการ User และ Permissions?

  • ความปลอดภัยของข้อมูล: ป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต และการแก้ไขข้อมูลโดยไม่ได้ตั้งใจ
  • การควบคุมการเข้าถึง: กำหนดสิทธิ์การเข้าถึงข้อมูลตามบทบาทของผู้ใช้ (เช่น ผู้ดูแลระบบ, นักพัฒนา, ผู้ใช้งานทั่วไป)
  • การปฏิบัติตามข้อกำหนด: ช่วยให้องค์กรปฏิบัติตามข้อกำหนดด้านความปลอดภัยของข้อมูล และกฎหมายที่เกี่ยวข้อง
  • การลดความเสี่ยง: ลดความเสี่ยงที่เกิดจากความผิดพลาดของมนุษย์ หรือการโจมตีทางไซเบอร์

การสร้าง User (CREATE USER)

คำสั่ง CREATE USER ใช้เพื่อสร้างบัญชีผู้ใช้ใหม่ใน MySQL Server ไวยากรณ์พื้นฐานคือ:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

คำอธิบาย:

  • 'username': ชื่อผู้ใช้ที่ต้องการสร้าง
  • 'host': Host ที่ผู้ใช้สามารถเชื่อมต่อได้ (เช่น 'localhost', '%', หรือ IP address)
  • 'password': รหัสผ่านของผู้ใช้

ตัวอย่าง:

CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123';
CREATE USER 'jane'@'%' IDENTIFIED BY 'securePassword';

ข้อควรระวัง:

  • Host 'localhost': หมายถึงผู้ใช้สามารถเชื่อมต่อได้จากเครื่องเดียวกันกับ MySQL Server เท่านั้น
  • Host '%': หมายถึงผู้ใช้สามารถเชื่อมต่อได้จากทุกที่ (ไม่แนะนำสำหรับ Production Environment)
  • รหัสผ่าน: ควรใช้รหัสผ่านที่แข็งแกร่งและปลอดภัยเสมอ

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

การกำหนด Host อย่างชัดเจนเป็นสิ่งสำคัญเพื่อจำกัดการเข้าถึงฐานข้อมูล การอนุญาตให้ผู้ใช้เชื่อมต่อจากทุกที่ ('%') เพิ่มความเสี่ยงด้านความปลอดภัยอย่างมาก ควรจำกัด Host ให้แคบที่สุดเท่าที่จะเป็นไปได้ โดยพิจารณาจากความต้องการในการเข้าถึงของผู้ใช้

การให้สิทธิ์ (GRANT)

คำสั่ง GRANT ใช้เพื่อกำหนดสิทธิ์การเข้าถึงให้กับผู้ใช้ ไวยากรณ์พื้นฐานคือ:

GRANT privileges ON database.table TO 'username'@'host';

คำอธิบาย:

  • privileges: สิทธิ์ที่ต้องการให้ (เช่น SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES)
  • database.table: ฐานข้อมูลและตารางที่ต้องการให้สิทธิ์ (ใช้ *.* เพื่อให้สิทธิ์ทั้งหมดในทุกฐานข้อมูล)
  • 'username'@'host': ผู้ใช้ที่ต้องการให้สิทธิ์

ตัวอย่าง:

GRANT SELECT ON mydatabase.products TO 'john'@'localhost';
GRANT INSERT, UPDATE ON mydatabase.orders TO 'jane'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

คำอธิบายตัวอย่าง:

  • GRANT SELECT ON mydatabase.products TO 'john'@'localhost';: ให้ผู้ใช้ john ที่เชื่อมต่อจาก localhost มีสิทธิ์ SELECT บนตาราง products ในฐานข้อมูล mydatabase
  • GRANT INSERT, UPDATE ON mydatabase.orders TO 'jane'@'%';: ให้ผู้ใช้ jane ที่เชื่อมต่อจากทุกที่ มีสิทธิ์ INSERT และ UPDATE บนตาราง orders ในฐานข้อมูล mydatabase
  • GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;: ให้ผู้ใช้ admin ที่เชื่อมต่อจาก localhost มีสิทธิ์ทั้งหมดในทุกฐานข้อมูล และสามารถให้สิทธิ์แก่ผู้ใช้อื่นได้ (WITH GRANT OPTION)

ข้อควรระวัง:

  • ALL PRIVILEGES: ควรใช้ด้วยความระมัดระวัง และจำกัดเฉพาะผู้ดูแลระบบเท่านั้น
  • WITH GRANT OPTION: อนุญาตให้ผู้ใช้ที่ได้รับสิทธิ์ สามารถให้สิทธิ์แก่ผู้ใช้อื่นได้ ควรใช้เฉพาะในกรณีที่จำเป็นเท่านั้น
  • FLUSH PRIVILEGES: หลังจากให้สิทธิ์แล้ว ควรรันคำสั่ง FLUSH PRIVILEGES; เพื่อให้ MySQL Server โหลดสิทธิ์ใหม่

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

หลักการของ Least Privilege คือแนวทางปฏิบัติที่ดีที่สุดในการจัดการสิทธิ์ ควรให้สิทธิ์แก่ผู้ใช้เฉพาะเท่าที่จำเป็นสำหรับการทำงานของพวกเขาเท่านั้น การให้สิทธิ์มากเกินไป เพิ่มความเสี่ยงด้านความปลอดภัยโดยไม่จำเป็น

การเพิกถอนสิทธิ์ (REVOKE)

คำสั่ง REVOKE ใช้เพื่อเพิกถอนสิทธิ์การเข้าถึงจากผู้ใช้ ไวยากรณ์พื้นฐานคือ:

REVOKE privileges ON database.table FROM 'username'@'host';

คำอธิบาย:

  • privileges: สิทธิ์ที่ต้องการเพิกถอน (เช่น SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES)
  • database.table: ฐานข้อมูลและตารางที่ต้องการเพิกถอนสิทธิ์ (ใช้ *.* เพื่อเพิกถอนสิทธิ์ทั้งหมดในทุกฐานข้อมูล)
  • 'username'@'host': ผู้ใช้ที่ต้องการเพิกถอนสิทธิ์

ตัวอย่าง:

REVOKE SELECT ON mydatabase.products FROM 'john'@'localhost';
REVOKE INSERT, UPDATE ON mydatabase.orders FROM 'jane'@'%';
REVOKE ALL PRIVILEGES ON *.* FROM 'admin'@'localhost';

คำอธิบายตัวอย่าง:

  • REVOKE SELECT ON mydatabase.products FROM 'john'@'localhost';: เพิกถอนสิทธิ์ SELECT บนตาราง products ในฐานข้อมูล mydatabase จากผู้ใช้ john ที่เชื่อมต่อจาก localhost
  • REVOKE INSERT, UPDATE ON mydatabase.orders FROM 'jane'@'%';: เพิกถอนสิทธิ์ INSERT และ UPDATE บนตาราง orders ในฐานข้อมูล mydatabase จากผู้ใช้ jane ที่เชื่อมต่อจากทุกที่
  • REVOKE ALL PRIVILEGES ON *.* FROM 'admin'@'localhost';: เพิกถอนสิทธิ์ทั้งหมดในทุกฐานข้อมูล จากผู้ใช้ admin ที่เชื่อมต่อจาก localhost

ข้อควรระวัง:

  • FLUSH PRIVILEGES: หลังจากเพิกถอนสิทธิ์แล้ว ควรรันคำสั่ง FLUSH PRIVILEGES; เพื่อให้ MySQL Server โหลดสิทธิ์ใหม่

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

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

สรุป

การจัดการ User และ Permissions เป็นส่วนสำคัญในการรักษาความปลอดภัยของฐานข้อมูล MySQL การสร้าง User, การให้สิทธิ์, และการเพิกถอนสิทธิ์ เป็นเครื่องมือที่จำเป็นสำหรับผู้ดูแลระบบฐานข้อมูลในการควบคุมการเข้าถึงข้อมูล และป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต การทำความเข้าใจหลักการของ Least Privilege และการตรวจสอบสิทธิ์ของผู้ใช้เป็นประจำ จะช่วยให้ฐานข้อมูลของคุณปลอดภัยยิ่งขึ้น

ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับการสำรองข้อมูล (Backup) และการกู้คืนข้อมูล (Restore) ซึ่งเป็นสิ่งสำคัญในการป้องกันข้อมูลสูญหาย และรักษาความต่อเนื่องทางธุรกิจ

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る