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
GRANTchỉ cập nhật trên disk, không tự động reload cacheFLUSH PRIVILEGESbuộ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.