ERROR 1396 (HY000): bewerking CREATE USER mislukt voor ‘jack’@’localhost’

Het lijkt erop dat ik een eenvoudige gebruiker die ik heb verwijderd niet opnieuw kan maken, zelfs niet als root in MySQL.

Mijn geval: gebruiker ‘jack’ bestond al eerder, maar ik heb het verwijderd van mysql.user om het opnieuw te maken. Ik zie daar geen sporen van in die tabel. Als ik dit commando uitvoer voor een andere, willekeurige gebruikersnaam, zeg ‘jimmy’, werkt het prima (net zoals het oorspronkelijk deed voor ‘jack’).

Wat heb ik gedaan om gebruiker ‘jack’ te beschadigen en hoe kan ik die corruptie ongedaan maken om ‘jack’ opnieuw aan te maken als een geldige gebruiker voor deze installatie van MySQL?

Zie voorbeeld hieronder. (Natuurlijk zat er oorspronkelijk veel tijd tussen het maken van ‘jack’ en zijn verwijdering.)

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)

Antwoord 1, autoriteit 100%

Probeer een FLUSH PRIVILEGES;te doen. Deze MySQL-bugpost op die foutcodelijkt enig succes te melden in een soortgelijk geval naar de jouwe na het doorspoelen van privs. 


Antwoord 2, autoriteit 96%

ja, deze bug is aanwezig. Ik heb echter een kleine oplossing gevonden.

  • Stel dat de gebruiker er is, dus laat de gebruiker vallen
  • Na het verwijderen van de gebruiker moeten de mysql-rechten worden gewist
  • Maak nu de gebruiker aan.

Dat zou het moeten oplossen. Ervan uitgaande dat we de gebruiker admin @ localhost willen maken, zouden dit de opdrachten zijn:

gebruiker [email protected] laten vallen;
doorspoelrechten;
maak gebruiker [email protected] geïdentificeerd door 'admins_password'

Proost


Antwoord 3, autoriteit 20%

Deze bug zit sinds 2007 op bugs.mysql.com en deze thread is voornamelijk een herhaling van al die verkeerde antwoorden, zelfs tot een jaar geleden.

Volgens de MySQL-documentatie doen opdrachten als CREATE USER, GRANT, REVOKEen DROP USERdat wel. geen volgend FLUSH PRIVILEGEScommando nodig. Het is vrij duidelijk waarom, als je de documenten leest. Het is omdat het direct wijzigen van de MySQL-tabellen de informatie niet opnieuw in het geheugen laadt; maar de overvloed aan oplossingen voor deze bug claimt dat FLUSH PRIVILEGEShet antwoord is.

Dit is misschien niet eens een bug. Het is een samenzwering van documentatie – documenten variëren op één kritieke plaats van versie tot versie.

13.7.1.2. DROP GEBRUIKER-syntaxis

DROP GEBRUIKER gebruiker [ gebruiker] …

DROP GEBRUIKER ‘jeffrey’@’localhost’;

Als u alleen het gebruikersnaamgedeelte van de accountnaam opgeeft, wordt een hostnaamgedeelte van ‘%’ gebruikt.

DROP USERzoals aanwezig in MySQL 5.0.0 verwijdert alleen accounts die geen privileges hebben. In MySQL 5.0.2 is het aangepast om ook accountrechten te verwijderen. Dit betekent dat de procedure voor het verwijderen van een account afhankelijk is van uw versie van MySQL.

Vanaf MySQL 5.0.2 kunt u een account en de bijbehorende rechten als volgt verwijderen:

GEBRUIKER DROP-gebruiker;

De instructie verwijdert privilegerijen voor het account uit alle toekenningstabellen.

De enige keer dat ik deze foutmelding krijg, is wanneer ik DROP USER user; zoals de doc suggereert, maar MySQL behandelt de ‘%’ niet als een jokerteken op een manier die alle gebruikers bij alle hosts zou laten vallen. Het is toch niet zo wild. Of het kan zijn dat het soms werkt wanneer het de localhost-gebruiker verwijdert en vervolgens probeert de gebruiker op % te verwijderen.

Het is mij duidelijk dat wanneer het de gebruiker probeert te verwijderen bij %, het een foutmelding geeft en stopt. Daaropvolgende CREATE USERop localhost zal mislukken omdat de localhost-gebruiker nooit is verwijderd. Het lijkt niet nodig om tijd te verspillen aan het graven in de beurstabellen op zoek naar geesten, zoals een poster suggereerde.

Ik zie 7 stemmen voor:

DROP GEBRUIKER ‘[email protected]’; // verwijder het account volledig

Wat wordt geïnterpreteerd als DROP USER '[email protected]'@'%';# verkeerd

Er lijkt eigenlijk een echte bug te zijn die dezelfde foutmelding genereert, maar het heeft te maken met het verwijderen van de eerste aangemaakte gebruiker (na een nieuwe mysql-serverinstallatie). Of die bug is opgelost, weet ik niet; maar ik kan me niet herinneren dat dat de laatste tijd is gebeurd en ik ben op dit moment bezig met versie 5.5.27.


Antwoord 4, autoriteit 16%

Als u een DELETE-instructie gebruikt in de tabel mysql.userin een poging een gebruiker te verwijderen, probeer dan de gebruiker opnieuw te vestigen met CREATE USER, u krijgt een 1396-foutmelding. Los deze fout op door DROP USER 'username'@'host';

uit te voeren

DELETE 
  FROM mysql.user 
 WHERE user = 'jack';

(Je krijgt 1396 fouten als je probeert om jack opnieuw te maken)

CREATE USER 'jack'@'localhost' IDENTIFIED BY PASSWORD '*Fi47ytFF3CD5B14E7EjkjkkC1D3F8086A5C0-krn';

(Kom uit deze situatie door DROP USERuit te voeren)

DROP USER 'jack'@'localhost';

(Ik veronderstel dat FLUSH PRIVILEGESgeen kwaad kan, maar de gebruiker beslist eerst laten vallen.)


Antwoord 5, autoriteit 10%

Je zou op die manier niet handmatig gebruikers moeten verwijderen. MySQL heeft REVOKEsyntaxis voor het verwijderen van privileges en DROP USERom ze te verwijderen:

REVOKE priv1,priv2,priv3,etc... FROM '[email protected]'; // remove certain privileges
DROP USER '[email protected]'; // completely delete the account

Het is het beste om de aangeboden tools te gebruiken in plaats van op de achtergrond te rommelen.


Antwoord 6, autoriteit 5%

Laat de gebruiker vallen, wis de privileges; maak vervolgens de gebruiker aan. Het werkt!


Antwoord 7, autoriteit 3%

probeer delete from mysql.db where user = 'jack'en maak dan een gebruiker aan


Antwoord 8, autoriteit 3%

In MySQL 5.6 werkt het gebruik van Drop user userid;niet. Gebruik: Drop user 'userid'@'localhost';en/of Drop user 'userid'@'%';. Op deze manier kon ik de gebruiker verwijderen en opnieuw aanmaken.


Antwoord 9, autoriteit 2%

Controleer of

‘gebruiker’@’%’

of

‘gebruiker’@’localhost’


Antwoord 10, autoriteit 2%

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';

Antwoord 11, autoriteit 2%

Als u een gebruiker met sql wilt verwijderen, moet u de gerelateerde gegevens in deze tabellen verwijderen: columns_priv, db, procs_priv, tables_priv. Voer vervolgens flush privileges;


Antwoord 12

Ik had dezelfde fout. Maar beveel “FLUSH PRIVILEGES;” hielp niet.
Dat vond ik wel leuk:

CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';

Antwoord 13

Een eenvoudige oplossing voor dit probleem. Omdat de opdracht “delete” alleen het gebruikersrecord in de tabel “user” van de “mysql”-database verwijdert, kunnen we het opnieuw toevoegen en de gebruiker vervolgens volledig verwijderen. Dan zou je een gebruiker met dezelfde naam kunnen maken.

Stap 1. zoek het recordformaat van de gebruikerstabel in de mysql-database

use mysql;
select * from user;

Stap 2. Maak een dummy-record aan met de gebruikersnaam volgens de kolommen die in stap 1 zijn weergegeven. Voeg het bijvoorbeeld toe aan de tabel, vergeet niet de “gebruikersnaam” te vervangen door uw gebruikersnaam.

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');

Opmerking: soms kun je problemen ondervinden bij het invoegen, verander gewoon de gegevens om het te laten werken.

Stap 3. Verwijder de gebruiker.

drop user username;

Je kunt nu een gebruiker met dezelfde naam maken.


Antwoord 14

Gek genoeg heeft de MySQL-werkbank het voor mij opgelost. Op het tabblad Beheer -> Gebruikers en rechten, de gebruiker is vermeld met een fout. Het gebruik van de verwijderoptie loste het probleem op.


Antwoord 15

Dit bericht MySQL ERROR 1045 (28000 ): Toegang geweigerd voor gebruiker ‘bill’@’localhost’ (met wachtwoord: JA)is handig. Soms is er een anonieme gebruiker ”@’localhost’ of ”@’127.0.0.1′. Dus, om het probleem op te lossen,

  1. verwijder eerst de gebruiker wiens ‘creëren gebruiker’ is mislukt.

  2. Maak een nieuwe gebruiker aan.

  3. Verleen de vereiste rechten aan de nieuwe gebruiker.

  4. Flush-rechten.


Antwoord 16

Ik heb vandaag met dit probleem te maken gehad en ik heb het opgelost door de volgende stappen uit te voeren:

1) handmatig die verontrustende gebruiker invoegen die de verplichte velden opgeeft in mysql.user

mysql> insert into user(Host, User, Password, ssl_type) 
   values ('localhost', 'jack', 'jack', 'ANY');

2)

mysql> select * from user where User = 'jack';
   1 row in set (0.00 sec)

3) A.

mysql> drop user jack;
Query OK, 0 rows affected (0.00 sec)
B. mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
C. mysql> create user 'jack' identified by 'jack';
Query OK, 0 rows affected (0.00 sec)
D. mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+-----------+-----------+-------------------------------------------+----------+
| Host      | User      | Password                                  | ssl_type |
+-----------+-----------+-------------------------------------------+----------+
| localhost | jack      | jack                                      | ANY      |
| %         | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+-----------+-----------+-------------------------------------------+----------+
2 rows in set (0.00 sec)

4) A.

mysql> delete from user 
 where User = 'nyse_user' and 
       Host = 'localhost' and 
       Password ='nyse';
Query OK, 1 row affected (0.00 sec)

B.

mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+------+-----------+-------------------------------------------+----------+
| Host | User      | Password                                  | ssl_type |
+------+-----------+-------------------------------------------+----------+
| %    | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+------+-----------+-------------------------------------------+----------+
1 row in set (0.00 sec)

Hopelijk helpt dit.


Antwoord 17

Ik had hetzelfde probleem als OP, en het geaccepteerde antwoord werkte niet voor mij. In de opmerkingen van het geaccepteerde antwoord plaatste @Rathish een oplossing die voor mij werkte, ik wilde er de aandacht op vestigen.

Hier is de link:

https://www.rathishkumar.in/2018/10/Error-1396-HY000-Operation-CREATE-DROP-USER-failed-for-user-host.html

Rathish’s oplossing is om de toegang voor alle gebruikers in te trekken:

REVOKE ALL ON *.* FROM 'user'@'host';
DROP USER 'user'@'host';
FLUSH PRIVILEGES;

En hij wijst er ook handig op dat je de volgende tabellen kunt doorzoeken door “gebruiker” en “host” te selecteren om te bepalen of je een rudimentaire gebruiker hebt die over is van een eerdere bewerking:

mysql.user: User accounts, global privileges, and other non-privilege columns
mysql.db: Database-level privileges
mysql.tables_priv: Table-level privileges
mysql.columns_priv: Column-level privileges
mysql.procs_priv: Stored procedure and function privileges
mysql.proxies_priv: Proxy-user privilege

Bedankt!


Antwoord 18

Het lijkt erop dat u een gebruiker voor uw database moet maken en rechten moet verlenen voor de gemaakte gebruiker

–> gebruiker aanmaken voor database

CREATE  USER <'username'>@'%'IDENTIFIED BY <'password'>;

ex – MAAK GEBRUIKER ‘root’@’%’GEDENTIFICEERD DOOR ‘root’;

–> Privileges verlenen

FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON <db name>.* TO '<username>'@'%';

EX- VERLENEN ALLE PRIVILEGES OP mydb.* AAN ‘root’@’%’;


Antwoord 19

De MySQL-server draait met de optie –skip-grant-tables, dus deze instructie kan niet worden uitgevoerd


Antwoord 20

Ik weet dat dit oud is, maar aangezien dit het eerste resultaat in Google is, dacht ik dat ik mijn oplossing moest toevoegen. In mijn geval werkte het verwijderen van de gebruiker prima, maar het opnieuw aanmaken van de gebruiker gaf me een “ERROR 2013 (HY000): Verbinding met MySQL-server verbroken tijdens zoekopdracht” en “ERROR 2006 (HY000): MySQL-server is verdwenen.” Ik heb de flush-privileges geprobeerd -> gebruikersoplossing laten vallen, maar had nog steeds dezelfde fout.

In mijn geval was de fout te wijten aan een mysql-upgrade van 5.1 -> 5.6. Toen ik de foutenlogboeken bekeek, merkte ik dat er stond dat mysql_upgrade moest worden uitgevoerd. Deed dat en mijn gebruikersverklaring maken werkte prima!


Antwoord 21

Ik kreeg onlangs deze fout.

Wat voor mij werkte, was het inchecken in de mysql-werkbank ‘Users and Privileges’ en me realiseren dat de gebruiker nog steeds bestond.

Na het daar te hebben verwijderd, kon ik de gebruiker opnieuw maken.


Antwoord 22

mysql> DELETE FROM mysql.db WHERE user = 'jack'

Herstart de server:

# mysql.server restart

Voer dan je opdracht CREATE USERuit.


Antwoord 23

BUG van MySql opgelost: foutcode-1396

  • Telkens wanneer u probeerde een query uit te voeren die een gebruiker maakte zoals hieronder weergegeven.
    MijnSql> MAAK GEBRUIKER ‘springstudent’@’localhost’ GEDENTIFICEERD DOOR ‘springstudent’;
    VERLENEN ALLE VOORRECHTEN OP * . * NAAR ‘springstudent’@’localhost’;
  • Maar wanneer u een query probeert uit te voeren die een gebruiker maakt binnen alle previleges,
    Vanwege een bug geeft het voorrechten zonder de gebruiker te tonen
  • Vanwege dit probleem moeten we dit script gebruiken voor flush-privileges
    MijnSql> drop gebruiker ‘springstudent’@’localhost’;
    doorspoelrechten;
    maak gebruiker [email protected] geïdentificeerd door ‘admins_password’
  • Na het verwijderen van de gebruiker moeten de mysql-rechten worden gewist
  • Maak vervolgens opnieuw een gebruiker

Gotchaaa….Opgelost….


Antwoord 24

Verwijder gewoon de gebruikersgerelateerde gegevens uit mysql.db (misschien ook uit andere tabellen) en maak vervolgens beide opnieuw.


Antwoord 25

Ik had ook hetzelfde probleem, na een paar zoekopdrachten vond ik een oplossing die voor mij werkte. Ik hoop dat het je zal helpen.
Aangezien u al gebruikers heeft aangemaakt, kunt u nu proberen om FLUSH PRIVILEGESuit te voeren op uw Mysql-console.
Dit probleem staat al in de MySql-bugpost.Je kunt dit ook controleren. Nu kunt u na het doorspoelen een nieuwe gebruiker maken.
volg onderstaande stappen:

Step-1: Open terminal Ctrl+Alt+T
Step-2: mysql -u root -p  , it will ask for your MySQL password.

Je kunt nu de Mysql-console zien.

Step-3: CREATE USER 'username'@'host' IDENTIFIED by 'PASSWORD';

In plaats van gebruikersnaam kunt u de gewenste gebruikersnaam invoeren. Als u Mysql op uw lokale computer gebruikt, typt u “localhost”in plaats van de host, anders geeft u de servernaam op waartoe u toegang wilt.

Bijvoorbeeld: MAAK GEBRUIKER [email protected] GEDENTIFICEERD door ‘hallo’;

Er is nu een nieuwe gebruiker aangemaakt. Als u alle toegang wilt geven, typt u

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Je kunt nu de MySQL afsluiten door \qin te typen. Log nu opnieuw in via

mysql -u newusername -pen druk vervolgens op Enter. Je kunt alles zien.

Hopelijk helpt dit.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes