Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีเพิ่มสิทธิ์ SUPER Privilege ให้ User ใน MySQL

SUPER Privilege ให้สิทธิ์ควบคุมระดับ Server: Kill Thread, Set Global Variables, Replication, Flush Logs, v.v. ควรให้เฉพาะ Admin/Root เท่านั้น

วิธีที่ 1: ใช้ GRANT (แนะนำ - MySQL 5.7+)

GRANT SUPER ON *.* TO 'username'@'host' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

ตัวอย่าง

GRANT SUPER ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'strong_pass';
FLUSH PRIVILEGES;

วิธีที่ 2: UPDATE mysql.user ตรงๆ (เก่า/Advanced)

USE mysql;
UPDATE user SET Super_priv = 'Y' WHERE User = 'username' AND Host = 'host';
FLUSH PRIVILEGES;

ตรวจสอบสิทธิ์

SHOW GRANTS FOR 'username'@'host';
-- หรือ
SELECT Super_priv FROM mysql.user WHERE User = 'username' AND Host = 'host';

สิทธิ์ที่เกี่ยวข้อง (Related Privileges)

  • SUPER - ควบคุม Server, Kill Query, Set Global Var, Replication
  • PROCESS - ดู Processlist ทุก User
  • RELOAD - FLUSH PRIVILEGES, FLUSH LOGS
  • SHUTDOWN - ปิด Server
  • CREATE USER - สร้าง/ลบ User

⚠️ คำเตือนความปลอดภัย

  • SUPER Privilege = ควบคุม Server ได้ทั้งหมด
  • ห้ามให้ Application/User ธรรมดา
  • ใช้ Account แยกสำหรับ Admin Task
  • Audit การใช้งาน SUPER เป็นประจำ

MySQL 8.0+ Dynamic Privileges (แทน SUPER)

MySQL 8.0 แบ่ง SUPER ออกเป็น Dynamic Privileges ที่ละเอียดกว่า:

GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'user'@'host';  -- SET GLOBAL
GRANT SESSION_VARIABLES_ADMIN ON *.* TO 'user'@'host'; -- SET SESSION
GRANT CONNECTION_ADMIN ON *.* TO 'user'@'host';        -- KILL, etc.
GRANT REPLICATION_SLAVE_ADMIN ON *.* TO 'user'@'host'; -- Replication

แนะนำใช้ Dynamic Privileges แทน SUPER เพื่อความปลอดภัยและระดับความละเอียดที่ดีกว่า