⚠️ Cảnh báo quan trọng
Bài viết gốc hướng dẫn xóa trực tiếp từ bảng hệ thống mysql.db. Cách này KHÔNG KHUYẾN NGHỊ vì:
- Ghi trực tiếp vào system tables có thể hỏng metadata
- Không bền vững sau restart/upgrade
- Violation best practice bảo mật
Cách đúng: REVOKE Privileges
Xem quyền hiện tại
SHOW GRANTS FOR 'Chris'@'localhost';
Thu hồi quyền trên schema 'sample'
REVOKE ALL PRIVILEGES ON `sample`.* FROM 'Chris'@'localhost'; REVOKE ALL PRIVILEGES ON `sample\_%`.* FROM 'Chris'@'localhost';
Lưu ý: Backtick cho wildcard sample\_% (escape underscore).
Áp dụng thay đổi
FLUSH PRIVILEGES;
Cách quản lý quyền tốt hơn
Tạo role (MySQL 8.0+)
CREATE ROLE 'no_sample_access'; GRANT USAGE ON `sample`.* TO 'no_sample_access'; GRANT 'no_sample_access' TO 'Chris'@'localhost'; SET DEFAULT ROLE ALL TO 'Chris'@'localhost';
Quyền cấp schema cụ thể
-- Chỉ cho phép đọc GRANT SELECT ON `sample`.* TO 'Chris'@'localhost'; -- Cho phép đọc/ghi nhưng không DROP GRANT SELECT, INSERT, UPDATE, DELETE ON `sample`.* TO 'Chris'@'localhost';
Kiểm tra quyền
SHOW GRANTS FOR 'Chris'@'localhost';
Tóm tắt
| Cách làm | Đánh giá |
|---|---|
| DELETE FROM mysql.db | ❌ Nguy hiểm, không chuẩn |
| REVOKE + FLUSH PRIVILEGES | ✅ Chuẩn, an toàn |
| Role-based (MySQL 8.0+) | ✅ Tốt nhất cho quản lý tại scale |
Luôn dùng REVOKE/GRANT thay vì thao tác trực tiếp system tables.