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

Cấp quyền SELECT chỉ trên VIEW trong MySQL

GRANT SELECT ON VIEW: Cho user chỉ xem view, không xem table gốc

Cấp quyền trên đối tượng VIEW thay vì TABLE để giới hạn truy cập dữ liệu nhạy cảm (che cột, lọc hàng).

Cú pháp

GRANT SELECT ON tenDatabase.tenView TO 'tenUser'@'host';

Các bước thực hiện

  1. Xem danh sách view trong database:
    SHOW FULL TABLES IN tenDatabase WHERE TABLE_TYPE LIKE 'VIEW';
  2. Xem user hiện có:
    SELECT user, host FROM mysql.user;
  3. Cấp quyền:
    GRANT SELECT ON test.viewemployeeidandemployeename TO 'Adam Smith'@'localhost';

Kết quả kiểm tra

+-------------------------------+------------+
| Tables_in_test                | Table_type |
+-------------------------------+------------+
| empidandempname_view          | VIEW       |
| empinfoview                   | VIEW       |
| lookuptable                   | VIEW       |
| view_student                  | VIEW       |
| viewemployeeidandemployeename | VIEW       |
+-------------------------------+------------+

User 'Adam Smith'@'localhost' giờ chỉ có SELECT trên view viewemployeeidandemployeename, không thể SELECT trực tiếp bảng gốc.

Tại sao dùng View để kiểm soát truy cập?

  • Column masking: View chỉ expose cột an toàn (ẩn password, salary, PII).
  • Row-level security: View có WHERE lọc theo user/department.
  • Đơn giản hóa: User không cần biết join phức tạp.
  • Audit: Dễ theo dõi ai truy cập view nào.

Lưu ý

  • User phải có quyền SELECT trên view. Không cần quyền trên table gốc (MySQL kiểm tra quyền view owner - DEFINER).
  • View có DEFINER và SQL SECURITY DEFINER (mặc định) → chạy với quyền của creator. User chỉ cần quyền trên view.
  • Thu hồi quyền: REVOKE SELECT ON test.viewname FROM 'user'@'host';