Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แก้ไข ERROR 1396 (HY000): Operation CREATE USER failed ใน MySQL

Error 1396 (HY000) "Operation CREATE USER failed" เกิดขึ้นเมื่อพยายามสร้าง User ที่มีอยู่แล้ว หรือมีปัญหากับ Host/Plugin การแก้ไขคือตรวจสอบก่อนสร้าง หรือใช้ CREATE USER IF NOT EXISTS (MySQL 8.0.13+)

สร้าง User ให้ถูกต้อง

1. Syntax พื้นฐาน

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

2. ตัวอย่างสร้าง User 'Emma'@'localhost'

mysql> create user 'Emma'@'localhost' IDENTIFIED BY 'emma_654';
Query OK, 0 rows affected (0.00 sec)

3. ตรวจสอบ User ที่สร้าง

mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| Bob              | %         |
| Charlie          | %         |
| Robert           | %         |
| User2            | %         |
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| @UserName@       | localhost |
| Adam             | localhost |
| Adam Smith       | localhost |
| Chris            | localhost |
| David            | localhost |
| Emma             | localhost |  ← User ใหม่ปรากฏ
| Jace             | localhost |
| James            | localhost |
| John             | localhost |
| John Doe         | localhost |
| Michael          | localhost |
| Mike             | localhost |
| Robert           | localhost |
| User1            | localhost |
| am               | localhost |
| hbstudent        | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
+------------------+-----------+
26 rows in set (0.00 sec)

สาเหตุ Error 1396 และวิธีแก้

คำสั่งจัดการ User

-- ลบ User (ถ้ามีอยู่)
DROP USER 'Emma'@'localhost';

-- สร้างใหม่แบบปลอดภัย (MySQL 8.0.13+)
CREATE USER IF NOT EXISTS 'Emma'@'localhost' IDENTIFIED BY 'new_pass';

-- เปลี่ยนรหัสผ่าน
ALTER USER 'Emma'@'localhost' IDENTIFIED BY 'new_pass';

-- ให้สิทธิ์
GRANT SELECT ON db.* TO 'Emma'@'localhost';
FLUSH PRIVILEGES;

สรุป: Error 1396 มักมาจาก User มีอยู่แล้ว ใช้ DROP USER IF EXISTS แล้วสร้างใหม่ หรือ CREATE USER IF NOT EXISTS (MySQL 8.0.13+) ตรวจสอบ Host และ Authentication Plugin ให้ถูกต้อง

สาเหตุอาการวิธีแก้
User มีอยู่แล้วERROR 1396DROP USER ก่อน หรือใช้ IF NOT EXISTS
Host ไม่ตรงUser 'a'@'%' vs 'a'@'localhost' ต่างกันระบุ Host ให้ถูกต้อง
Plugin Authenticationcaching_sha2_password vs mysql_native_passwordระบุ Plugin: IDENTIFIED WITH mysql_native_password BY 'pass'
Reserved Accountmysql.sys, mysql.session, etc.อย่าสร้าง User ชื่อเหล่านี้