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

MySQL: User mới bị Access Denied dù đã cấp quyền - giải pháp FLUSH PRIVILEGES

Sau khi tạo user và cấp quyền trong MySQL, **bắt buộc chạy FLUSH PRIVILEGES** để nạp lại bảng quyền vào bộ nhớ. Nếu không, user mới sẽ bị "Access denied".

Quy trình đúng

1. Tạo user

mysql> CREATE USER 'Bob'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.56 sec)

2. Cấp quyền

mysql> GRANT ALL PRIVILEGES ON *.* TO 'Bob'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.23 sec)

3. Nạp lại quyền (QUAN TRỌNG)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.14 sec)

Tại sao cần FLUSH PRIVILEGES?

  • MySQL cache bảng quyền (grant tables) trong bộ nhớ để tăng hiệu suất
  • GRANT chỉ cập nhật trên disk, không tự động reload cache
  • FLUSH PRIVILEGES buộc server đọc lại grant tables từ disk

Lưu ý từ MySQL 8.0

Từ MySQL 8.0, GRANT tự động reload quyền, FLUSH PRIVILEGES không còn bắt buộc nhưng vẫn an toàn nếu chạy thêm.

Kiểm tra quyền user

mysql> SHOW GRANTS FOR 'Bob'@'%';

Sau khi FLUSH PRIVILEGES, user Bob có thể đăng nhập thành công.