Vấn đề: Lỗi CREATE USER failed (ERROR 1396)
Lỗi này thường xảy ra khi:
- User đã tồn tại (thử tạo trùng).
- User vừa bị xóa nhưng cache quyền chưa cập nhật (
FLUSH PRIVILEGES). - Cú pháp sai (thiếu host, mật khẩu yếu...).
Cách tạo user đúng chuẩn
CREATE USER 'Emma'@'localhost' IDENTIFIED BY 'emma_654';
'Emma'– Tên user.'localhost'– Host cho phép kết nối (có thể'%'cho mọi host).IDENTIFIED BY 'password'– Mật khẩu (MySQL 8.0+ mặc định dùng caching_sha2_password).
Kiểm tra user đã tạo
SELECT user, host FROM mysql.user;
Kết quả mẫu (đã có Emma@localhost)
+------------------+-----------+
| user | host |
+------------------+-----------+
| Bob | % |
| Charlie | % |
| Robert | % |
| ... | ... |
| Emma | localhost |
| ... | ... |
+------------------+-----------+
Khắc phục lỗi 1396 thường gặp
- User đã tồn tại: Dùng
DROP USER 'Emma'@'localhost';trước, hoặcCREATE USER IF NOT EXISTS ...(MySQL 8.0.13+). - Vừa DROP USER nhưng vẫn lỗi: Chạy
FLUSH PRIVILEGES;để làm mới cache quyền. - Host không khớp:
'Emma'@'localhost'khác'Emma'@'%'. Xem cộthosttrongmysql.user. - Mật khẩu không đạt policy: MySQL 8.0+ yêu cầu độ phức tạp. Tắt tạm:
SET GLOBAL validate_password.policy=LOW;(cần quyền SUPER).
Best practice
- Luôn chỉ định host rõ ràng (
'user'@'host'). - Dùng
IF NOT EXISTS(MySQL 8.0.13+). - Sau khi tạo, cấp quyền:
GRANT SELECT, INSERT ON db.* TO 'user'@'host';. - Kiểm tra bằng
SHOW GRANTS FOR 'user'@'host';.