การเพิกถอนสิทธิ์เข้าถึงฐานข้อมูล (Schema) ของผู้ใช้เฉพาะ
ใน MySQL สิทธิ์การเข้าถึงฐานข้อมูลเก็บอยู่ในตาราง mysql.db สามารถลบแถวที่เกี่ยวข้องกับผู้ใช้และฐานข้อมูลที่ต้องการป้องกัน แล้วรัน FLUSH PRIVILEGES เพื่อโหลดสิทธิ์ใหม่
ไวยากรณ์
DELETE FROM mysql.db
WHERE Db IN ('your_schema', 'your_schema\_%')
AND User = 'your_user'
AND Host = 'your_host';
FLUSH PRIVILEGES;
ตัวอย่าง: ป้องกันผู้ใช้ 'Chris'@'localhost' เข้าถึง schema 'sample'
-- 1. ดูรายชื่อผู้ใช้ที่มีอยู่
SELECT User, Host FROM mysql.user;
-- 2. ลบสิทธิ์เข้าถึง schema 'sample' และ 'sample\_%' (wildcard สำหรับ sample_*)
DELETE FROM mysql.db
WHERE Db IN ('sample', 'sample\_%')
AND User = 'Chris'
AND Host = 'localhost';
-- 3. โหลดสิทธิ์ใหม่
FLUSH PRIVILEGES;
คำอธิบาย:
Db IN ('sample', 'sample\_%'): ครอบคลุมทั้ง schema ชื่อ 'sample' แบบตรงตัว และ schema ที่ขึ้นต้นด้วย 'sample_' (underscore ต้อง escape ด้วย backslash)FLUSH PRIVILEGES: บังคับให้ MySQL โหลดตารางสิทธิ์ใหม่จากดิสก์ ทำให้การเปลี่ยนแปลงมีผลทันที
วิธีทางเลือก (แนะนำสำหรับ MySQL 8.0+): ใช้คำสั่ง REVOKE ซึ่งเป็นมาตรฐาน SQL และจัดการง่ายกว่า
REVOKE ALL PRIVILEGES ON `sample`.* FROM 'Chris'@'localhost'; REVOKE ALL PRIVILEGES ON `sample\_%`.* FROM 'Chris'@'localhost'; FLUSH PRIVILEGES;
⚠ ข้อควรระวัง:
- การแก้ไขตาราง mysql.db โดยตรง (DELETE/INSERT/UPDATE) ไม่ได้รับการสนับสนุนอย่างเป็นทางการ อาจทำให้ระบบไม่เสถียร
- ควรใช้
GRANT/REVOKEเป็นหลัก - ผู้ใช้ root หรือมีสิทธิ์ SUPER เท่านั้นที่ทำได้