Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Ngăn chặn user truy cập schema cụ thể trong MySQL?

⚠️ 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.