Tại sao DROP USER không xóa được user khỏi mysql.user?
Khi thực hiện DROP USER nhưng user vẫn xuất hiện trong bảng mysql.user, nguyên nhân thường là do user được tạo với host khác so với host bạn đang xóa.
Kiểm tra user và host hiện tại
mysql> SELECT user, host FROM mysql.user;
Kết quả mẫu:
+------------------+-----------+ | user | host | +------------------+-----------+ | Bob | % | | Manish | % | | hbstudent | localhost | | root | % | | ... | ... | +------------------+-----------+
Thử xóa user 'hbstudent'
mysql> DROP USER 'hbstudent'@'localhost'; Query OK, 0 rows affected (0.17 sec)
Kiểm tra lại - user vẫn còn!
mysql> SELECT user, host FROM mysql.user;
Kết quả: user 'hbstudent'@'localhost' đã biến mất, nhưng nếu có user 'hbstudent'@'%' thì vẫn còn.
Nguyên nhân và giải pháp
- User được định danh bằng cặp (user, host): 'user'@'localhost' khác 'user'@'%'
- Kiểm tra kỹ host trước khi xóa:
SELECT user, host FROM mysql.user WHERE user = 'hbstudent'; - Xóa đúng cặp:
DROP USER 'hbstudent'@'%';nếu tồn tại - Flush privileges sau khi xóa:
FLUSH PRIVILEGES;
Lưu ý quan trọng
MySQL 8.0+ yêu cầu quyền CREATE USER hoặc DELETE trên database mysql để thực hiện DROP USER.