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

วิธีป้องกันไม่ให้ผู้ใช้เข้าถึง Schema เฉพาะใน MySQL

การเพิกถอนสิทธิ์เข้าถึงฐานข้อมูล (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 เท่านั้นที่ทำได้