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, ReplicationPROCESS- ดู Processlist ทุก UserRELOAD- FLUSH PRIVILEGES, FLUSH LOGSSHUTDOWN- ปิด ServerCREATE 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 เพื่อความปลอดภัยและระดับความละเอียดที่ดีกว่า