Il semble que je ne sois pas capable de recréer un utilisateur simple que j'ai supprimé, même en tant que root dans MySQL.
Mon cas: l'utilisateur 'jack' existait auparavant, mais je l'ai supprimé de mysql.user afin de le recréer. Je ne vois aucun vestige de ceci dans ce tableau. Si j'exécute cette commande pour un autre nom d'utilisateur aléatoire, dites «jimmy», cela fonctionnera bien (comme ce fut le cas à l'origine pour «jack»).
Qu'ai-je fait pour corrompre l'utilisateur 'jack' et comment puis-je annuler cette corruption afin de recréer 'jack' en tant qu'utilisateur valide pour cette installation de MySQL?
Voir exemple ci-dessous. (Bien sûr, à l'origine, il y avait beaucoup de temps entre la création de 'jack' et son retrait.)
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)
Essayez de faire un FLUSH PRIVILEGES
. Ce message de bogue MySQL sur ce code d'erreur semble signaler un certain succès dans un cas similaire au vôtre après le vidage de privs.
oui ce bug est là. Cependant, j'ai trouvé une petite solution de contournement.
Cela devrait le résoudre. En supposant que nous voulions créer l'utilisateur admin @ localhost, voici les commandes:
supprimer l'utilisateur admin @ localhost; privilèges de vidage; créer l'utilisateur admin @ localhost identifié par 'admins_password'
À votre santé
Ce bogue est sur bugs.mysql.com depuis 2007 et ce fil est principalement un récit de toutes ces mauvaises réponses, même il y a un an.
Selon la documentation de MySQL, les commandes telles que CREATE USER
, GRANT
, REVOKE
et DROP USER
ne nécessitent pas de commande FLUSH PRIVILEGES
ultérieure. C'est assez clair pourquoi, si on lit la documentation. C'est parce que la modification directe des tables MySQL ne recharge pas les informations en mémoire; Pourtant, la pléthore de solutions à ce bogue prétend que FLUSH PRIVILEGES
est la solution.
Cela aussi peut ne même pas être un bug. Il s’agit d’un complot de documentation - les documents varient d’un endroit à l’autre, d’une version à l’autre.
13.7.1.2. DROP USER Syntaxe
...
DROP USER utilisateur [ utilisateur] ...
...
DROP USER 'jeffrey' @ 'localhost';
Si vous spécifiez uniquement la partie nom d'utilisateur du nom de compte, une partie nom d'hôte de '%' est utilisée.
DROP USER
tel qu'il est présent dans MySQL 5.0.0 supprime uniquement les comptes sans privilèges. Dans MySQL 5.0.2, il a été modifié pour supprimer également les privilèges de compte. Cela signifie que la procédure de suppression d'un compte dépend de votre version de MySQL.
Depuis MySQL 5.0.2, vous pouvez supprimer un compte et ses privilèges comme suit:
DROP USER utilisateur;
L'instruction supprime les lignes de privilège pour le compte de toutes les tables d'attribution.
La seule fois où j'obtiens cette erreur, c'est quand je fais DROP USER user
; comme le suggère la doc, mais MySQL ne traite pas le '%' comme un caractère générique qui ferait perdre tous les utilisateurs à tous les hôtes. Ce n'est pas si sauvage après tout. Ou bien, il se peut que cela fonctionne parfois lorsqu'il supprime l'utilisateur localhost puis tente de supprimer celui de%.
Il est clair pour moi que lorsqu'il tente de supprimer l'utilisateur en%, il génère un message d'erreur et se ferme. CREATE USER
suivant sur localhost échouera car l'utilisateur localhost n'a jamais été supprimé. Il semble inutile de perdre du temps à fouiller dans les tables de subventions à la recherche de fantômes, comme l'a suggéré une affiche.
Je vois 7 votes pour:
DROP USER 'prise @ localhost'; // supprime complètement le compte
Ce qui est interprété comme DROP USER 'jack@localhost'@'%';
# faux
Il semble en fait exister un vrai bogue qui génère le même message d'erreur, mais il s'agit du premier utilisateur créé (après l'installation d'un nouveau serveur mysql). Si ce bogue a été corrigé, je ne sais pas. mais je ne me souviens pas de ce qui s'est passé récemment et je suis à la version 5.5.27 pour le moment.
Si vous utilisez une instruction DELETE
sur la table mysql.user
pour tenter de supprimer un utilisateur, puis tentez de rétablir l'utilisateur avec CREATE USER
, vous obtiendrez une erreur 1396
. Éliminez cette erreur en exécutant DROP USER 'username'@'Host';
DELETE
FROM mysql.user
WHERE user = 'jack';
(Vous obtiendrez 1396 erreurs si vous essayez de recréer une prise)
CREATE USER 'jack'@'localhost' IDENTIFIED BY PASSWORD '*Fi47ytFF3CD5B14E7EjkjkkC1D3F8086A5C0-krn';
(Sortez de cette situation en exécutant DROP USER
)
DROP USER 'jack'@'localhost';
(Je suppose que FLUSH PRIVILEGES
ne peut pas faire de mal, mais laissez tomber l'utilisateur en premier.)
Vous ne devriez pas supprimer manuellement les utilisateurs de cette façon. MySQL a REVOKE
syntaxe pour supprimer les privilèges et DROP USER
pour les supprimer:
REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account
Il est préférable d’utiliser les outils fournis plutôt que de passer à l’arrière-plan.
Supprimez l'utilisateur, supprimez les privilèges; puis créez l'utilisateur. Ça marche!
essayez delete from mysql.db where user = 'jack'
puis créez un utilisateur
Dans MySQL 5.6, utiliser Drop user userid;
ne fonctionne pas. Utilisez: Drop user 'userid'@'localhost';
et/ou Drop user 'userid'@'%';
. De cette façon, j'ai pu supprimer l'utilisateur et le recréer.
two method
one :
setp 1: drop user 'jack'@'localhost';
setp 2: create user 'jack'@localhost identified by 'ddd';
two:
setp 1: delete from user where user='jack'and Host='localhost';
setp 2: flush privileges;
setp 3: create user 'jack'@'localhost' identified by 'ddd';
Si vous souhaitez supprimer un utilisateur avec SQL, vous devez supprimer les données associées dans ces tables: columns_priv
, db
, procs_priv
, tables_priv
Puis exécutez flush privileges;
Un simple travail sur cette question. Comme la commande "delete" ne supprime que l'enregistrement de l'utilisateur dans la table "user" de la base de données "mysql", nous pourrions le rajouter puis supprimer complètement l'utilisateur. Ensuite, vous pouvez créer un utilisateur avec le même nom.
Étape 1. Trouver le format d'enregistrement de la table utilisateur dans la base de données mysql
use mysql;
select * from user;
Étape 2. Selon les colonnes affichées à l'étape 1, créez un enregistrement factice avec le nom d'utilisateur. Insérez-le dans la table, par exemple, rappelez-vous de remplacer le "nom d'utilisateur" par votre nom d'utilisateur.
Insert into user value ('%','username','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','','','','','0','0','0',
'0','mysql_native_password',
'*52C5E3AC6BC5E2E0BFF86978BF62A1481AC79D58','N',
'2016-12-10 23:59:12',null,'N');
Remarque: vous pouvez parfois rencontrer des problèmes lors de l'insertion, il suffit de modifier les données pour que cela fonctionne.
Étape 3. Supprimez l'utilisateur.
drop user username;
Vous pouvez maintenant créer un utilisateur avec le même nom.
This post MySQL ERROR 1045 (28000): L'accès est refusé pour l'utilisateur 'bill' @ 'localhost' (avec le mot de passe: YES) est utile. Parfois, il existe un utilisateur anonyme '' @ 'localhost' ou '' @ '127.0.0.1'. Donc, pour résoudre le problème,
d'abord déposer l'utilisateur dont le 'créer l'utilisateur' a échoué.
Créer un nouvel utilisateur.
Accordez les privilèges requis au nouvel utilisateur.
Privilèges Flush.
J'ai eu la même erreur. Mais commande "FLUSH PRIVILEGES;" n'a pas aidé . J'ai fait comme ça:
CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';
J'ai récemment eu cette erreur.
Ce qui a fonctionné pour moi, c’est de vérifier dans le mysql workbench «Utilisateurs et privilèges» et de réaliser que l’utilisateur existait toujours.
Après l'avoir supprimé de là, j'ai pu recréer l'utilisateur.
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Redémarrez le serveur:
# mysql.server restart
Ensuite, faites votre commande CREATE USER
.
Vérifiez si est
'utilisateur'@'%'
ou
'utilisateur' @ 'localhost'
Le serveur MySQL s'exécute avec l'option --skip-grant-tables, il ne peut donc pas exécuter cette instruction.
Je sais que c'est vieux, mais comme c'est le premier résultat dans Google, j'ai décidé d'ajouter ma solution. Dans mon cas, laisser tomber l'utilisateur fonctionnait bien, mais recréer l'utilisateur m'a donné l'ERREUR 2013 (HY000): Connexion perdue avec le serveur MySQL lors de l'interrogation »et« ERREUR 2006 (HY000): le serveur MySQL est parti » J'ai essayé les privilèges de vidage -> supprimer la solution utilisateur, mais j'avais toujours la même erreur.
Dans mon cas, l'erreur était due à une mise à jour de MySQL de 5.1 -> 5.6. En regardant les journaux d’erreur, j’ai remarqué qu’il était dit d’exécuter mysql_upgrade. Est-ce que cela et ma déclaration de création d'utilisateur ont bien fonctionné!