Parece que no puedo volver a crear un simple usuario que he eliminado, incluso como root en MySQL.
Mi caso: el usuario 'jack' existía antes, pero lo borré de mysql.user para volver a crearlo. No veo ningún vestigio en esa tabla. Si ejecuto este comando para algún otro nombre de usuario al azar, digamos 'jimmy', funciona bien (igual que lo hizo originalmente para 'jack').
¿Qué he hecho para corromper al usuario 'jack' y cómo puedo deshacer esa corrupción para volver a crear 'jack' como un usuario válido para esta instalación de MySQL?
Véase el ejemplo siguiente. (Por supuesto, originalmente, hubo mucho tiempo entre la creación de 'jack' y su eliminación).
mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from user;
+------------------+-----------------+
| user | host |
+------------------+-----------------+
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| jack | localhost |
| root | localhost |
| root | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)
mysql> delete from user where user = 'jack';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host from user;
+------------------+-----------------+
| user | host |
+------------------+-----------------+
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | russ-elite-book |
+------------------+-----------------+
4 rows in set (0.00 sec)
mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost'
mysql> CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from user;
+------------------+-----------------+
| user | host |
+------------------+-----------------+
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| jimmy | localhost |
| root | localhost |
| root | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)
Intenta hacer un FLUSH PRIVILEGES
. Este post de error de MySQL sobre ese código de error parece reportar algo de éxito en un caso similar al tuyo después de vaciar los privilegios.
No debería eliminar usuarios manualmente de esa manera. MySQL tiene la sintaxis REVOKE
para eliminar privilegios y DROP USER
para borrarlos:
REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account
Lo mejor es utilizar las herramientas proporcionadas en lugar de andar enredando en el fondo.