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

Khắc phục lỗi ERROR 1396 (HY000): Operation CREATE USER failed trong MySQL

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

  1. User đã tồn tại: Dùng DROP USER 'Emma'@'localhost'; trước, hoặc CREATE USER IF NOT EXISTS ... (MySQL 8.0.13+).
  2. Vừa DROP USER nhưng vẫn lỗi: Chạy FLUSH PRIVILEGES; để làm mới cache quyền.
  3. Host không khớp: 'Emma'@'localhost' khác 'Emma'@'%'. Xem cột host trong mysql.user.
  4. 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';.