Il semble que je ne puisse pas 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 cela dans ce tableau. Si j'exécute cette commande pour un autre nom d'utilisateur aléatoire, disons «jimmy», cela fonctionne très bien (tout comme il l'a fait à l'origine pour «jack»).
Qu'est-ce que j'ai 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 l'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)
la source
oui ce bug est là. Cependant, j'ai trouvé une petite solution de contournement.
Cela devrait le résoudre. En supposant que nous voulons créer l'utilisateur admin @ localhost, ce seraient les commandes:
À votre santé
la source
Ce bug est présent sur bugs.mysql.com depuis 2007 et ce fil n'est principalement qu'un perroquet de toutes ces mauvaises réponses, même il y a un an.
Selon la documentation de MySQL, commandes telles que
CREATE USER
,GRANT
,REVOKE
etDROP USER
ne nécessitent pas une ultérieureFLUSH PRIVILEGES
commande. Il est assez clair pourquoi, si l'on lit les documents. C'est parce que la modification directe des tables MySQL ne recharge pas les informations en mémoire; pourtant, la pléthore de solutions à cette revendication de bugFLUSH PRIVILEGES
est la réponse.Cela peut même ne pas être un bug. Il s'agit d'un complot de documentation - les documents varient à un endroit critique d'une version à l'autre.
13.7.1.2. Syntaxe de DROP USER
...
...
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 que 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:
L'instruction supprime les lignes de privilège pour le compte de toutes les tables d'octroi.
La seule fois où j'obtiens cette erreur, c'est quand je le fais
DROP USER user
; comme le suggère le doc, mais MySQL ne traite pas le '%' comme un caractère générique d'une manière qui supprimerait tous les utilisateurs sur tous les hôtes. Ce n'est pas si sauvage après tout. Ou, il se peut que cela fonctionne parfois lorsqu'il supprime l'utilisateur localhost, puis essaie de supprimer celui de%.Il est clair pour moi que lorsqu'il essaie de supprimer l'utilisateur à%, il émet un message d'erreur et se ferme. Le suivant
CREATE USER
sur localhost échouera car l'utilisateur localhost n'a jamais été supprimé. Il ne semble pas nécessaire de perdre du temps à fouiller les tables de subventions à la recherche de fantômes, comme l'a suggéré une affiche.Je vois 7 votes pour:
Ce qui est interprété comme
DROP USER 'jack@localhost'@'%';
# fauxEn fait, il semble y avoir un vrai bug qui génère le même message d'erreur, mais cela a à voir avec le premier utilisateur créé (après une nouvelle installation du serveur mysql). Si ce bogue a été corrigé, je ne sais pas; mais je ne me souviens pas que cela se soit produit récemment et je suis à la version 5.5.27 pour le moment.
la source
mariadb-server-5.5.60-1.el7_5.x86_64
Si vous utilisez une
DELETE
instruction sur lamysql.user
table pour tenter de supprimer un utilisateur, puis essayez de rétablir l'utilisateur avecCREATE USER
, vous obtiendrez une1396
erreur. Débarrassez-vous de cette erreur en exécutantDROP USER 'username'@'host';
(Vous obtiendrez 1396 erreurs si vous essayez de recréer la prise)
(Sortez de cette situation en courant
DROP USER
)(Je suppose que
FLUSH PRIVILEGES
cela ne peut pas faire de mal, mais laissez d'abord tomber l'utilisateur.)la source
Vous ne devez pas supprimer manuellement les utilisateurs de cette façon. MySQL a une
REVOKE
syntaxe pour supprimer les privilèges et lesDROP USER
supprimer:Il vaut mieux utiliser les outils fournis plutôt que de nettoyer en arrière-plan.
la source
flush privileges
en premier lieu? Les documents de MySQL officiels font parler de choses commedelete from user where user = 'jack';
etflush privileges
. Pourquoi dites-vous qu'ils ne font pas partie des outils fournis?'jack@localhost'
devrait probablement être'jack'@'localhost'
ici.Supprimez l'utilisateur, videz les privilèges; ensuite, créez l'utilisateur. Ça marche!
la source
essayez de
delete from mysql.db where user = 'jack'
créer un utilisateurla source
Dans MySQL 5.6, l'utilisation
Drop user userid;
ne fonctionne pas. Utilisez:Drop user 'userid'@'localhost';
et / ouDrop user 'userid'@'%';
. De cette façon, j'ai pu supprimer l'utilisateur et le recréer.la source
la source
Vérifiez si
ou
la source
Si vous voulez supprimer un utilisateur avec SQL, vous devez supprimer les données associées dans ces tableaux:
columns_priv
,db
,procs_priv
,tables_priv
. Ensuite, exécutezflush privileges;
la source
Curieusement, le plan de travail MySQL l'a résolu pour moi. Dans l'onglet Administration -> Utilisateurs et privilèges, l'utilisateur a été répertorié avec une erreur. L'utilisation de l'option de suppression a résolu le problème.
la source
Un simple travail autour de cette question. Comme la commande "supprimer" supprime uniquement l'enregistrement utilisateur dans la table "utilisateur" de la base de données "mysql", nous pourrions l'ajouter à nouveau puis supprimer complètement l'utilisateur. Ensuite, vous pouvez créer un utilisateur du même nom.
Étape 1. Trouver le format d'enregistrement de la table utilisateur dans la base de données mysql
Étape 2. Selon les colonnes affichées à l'étape 1, créez un enregistrement factice avec le nom d'utilisateur. Insérez-le dans le tableau, par exemple, rappelez-vous de remplacer le "nom d'utilisateur" par votre nom d'utilisateur.
Remarque: parfois, vous pouvez rencontrer des problèmes lors de l'insertion, modifiez simplement les données pour les faire fonctionner.
Étape 3. Supprimez l'utilisateur.
Vous pouvez maintenant créer un utilisateur du même nom.
la source
Cet article MySQL ERROR 1045 (28000): Accès refusé à l'utilisateur 'bill' @ 'localhost' (en utilisant le mot de passe: OUI) est utile. Parfois, il existe un utilisateur anonyme '' @ 'localhost' ou '' @ '127.0.0.1'. Donc, pour résoudre le problème,
supprimez d'abord l'utilisateur dont la «création d'utilisateur» a échoué.
Créez un nouvel utilisateur.
Accordez les privilèges requis au nouvel utilisateur.
Privilèges de vidage.
la source
J'ai eu la même erreur. Mais commande "FLUSH PRIVILEGES;" n'a pas aidé. J'ai aimé ça:
la source
Le serveur MySQL fonctionne avec l'option --skip-grant-tables, il ne peut donc pas exécuter cette instruction
la source
Je sais que c'est vieux, mais comme c'est le premier résultat dans Google, j'ai pensé que je devrais ajouter ma solution. Dans mon cas, la suppression de l'utilisateur a bien fonctionné, mais sa recréation m'a donné "ERREUR 2013 (HY000): connexion perdue au serveur MySQL pendant la requête" et "ERREUR 2006 (HY000): le serveur MySQL est parti". J'ai essayé les privilèges de vidage -> supprimer la solution utilisateur, mais j'ai toujours eu la même erreur.
Dans mon cas, l'erreur était due à une mise à niveau mysql de 5.1 -> 5.6. En consultant les journaux d'erreurs, j'ai remarqué qu'il disait d'exécuter mysql_upgrade. Est-ce que cela et ma déclaration d'utilisateur de création ont bien fonctionné!
la source
J'ai récemment eu cette erreur.
Ce qui a fonctionné pour moi, c'est de vérifier dans le plan de travail mysql 'Users and Privileges' et de réaliser que l'utilisateur existait toujours.
Après l'avoir supprimé, j'ai pu recréer l'utilisateur.
la source
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Redémarrez le serveur:
# mysql.server restart
Faites ensuite votre
CREATE USER
commande.la source
CREATE
aprèsDELETE
.J'ai rencontré ce problème aujourd'hui et je l'ai résolu en procédant comme suit:
1) insérer manuellement cet utilisateur perturbateur fournissant la valeur des champs obligatoires dans
mysql.user
2)
3) A.
4) A.
B.
J'espère que cela t'aides.
la source
Supprimez simplement les données liées à l'utilisateur de mysql.db (peut-être aussi d'autres tables), puis recréez les deux.
la source
J'avais également rencontré le même problème, après quelques recherches, j'ai trouvé une solution qui fonctionnait pour moi et j'espère que cela vous aidera. Comme vous avez déjà créé des utilisateurs, essayez maintenant de faire un
FLUSH PRIVILEGES
sur votre console Mysql. Ce problème est déjà dans le post de bogue MySql. Vous pouvez également vérifier celui-ci. Maintenant, après le rinçage, vous pouvez créer un nouvel utilisateur. suivez les étapes ci-dessous:Vous pouvez maintenant voir la console Mysql.
Au lieu du nom d'utilisateur, vous pouvez mettre le nom d'utilisateur que vous souhaitez. Si vous exécutez Mysql sur votre machine locale, tapez "localhost" au lieu de l'hôte, sinon donnez le nom de votre serveur auquel vous souhaitez accéder.
Ex: CREATE USER smruti @ localhost IDENTIFIED by 'hello';
Maintenant, un nouvel utilisateur est créé. Si vous souhaitez accorder tous les accès, tapez
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Vous pouvez maintenant quitter MySQL en tapant
\q
.Maintenant, connectez-vous à nouveau viamysql -u newusername -p
, puis appuyez sur Entrée. Vous pouvez tout voir.J'espère que cela t'aides.
la source