426 Stimmen

FEHLER 1396 (HY000): Operation CREATE USER für 'jack'@'localhost' fehlgeschlagen

Ich scheine nicht in der Lage zu sein, einen einfachen Benutzer, den ich gelöscht habe, neu zu erstellen, selbst als Root in MySQL.

Mein Fall: Der Benutzer "jack" existierte bereits, aber ich habe ihn aus mysql.user gelöscht, um ihn neu zu erstellen. Ich sehe keine Spuren davon in dieser Tabelle. Wenn ich diesen Befehl für einen anderen, zufälligen Benutzernamen, z. B. "jimmy", ausführe, funktioniert er einwandfrei (genau wie ursprünglich für "jack").

Was habe ich getan, um den Benutzer 'jack' zu beschädigen, und wie kann ich diese Beschädigung rückgängig machen, um 'jack' wieder als gültigen Benutzer für diese Installation von MySQL anzulegen?

Siehe nachstehendes Beispiel. (Natürlich lag ursprünglich viel Zeit zwischen der Erschaffung von "Jack" und seiner Entfernung).

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)

3voto

Jason Mao Punkte 31

Es gibt eine einfache Lösung für dieses Problem. Da der Befehl "delete" nur den Benutzerdatensatz in der "user"-Tabelle der "mysql"-Datenbank löscht, können wir ihn wieder hinzufügen und dann den Benutzer vollständig löschen. Dann können Sie einen Benutzer mit demselben Namen anlegen.

Schritt 1. Finden Sie das Datensatzformat der Benutzertabelle in der mysql-Datenbank

use mysql;
select * from user;

Schritt 2. Erstellen Sie anhand der in Schritt 1 gezeigten Spalten einen Dummy-Datensatz mit dem Benutzernamen. Fügen Sie ihn in die Tabelle ein. Denken Sie daran, den "Benutzernamen" durch Ihren Benutzernamen zu ersetzen.

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

Hinweis: Manchmal kann es zu Problemen beim Einfügen kommen, ändern Sie einfach die Daten, damit es funktioniert.

Schritt 3. Lassen Sie den Benutzer fallen.

drop user username;

Jetzt können Sie einen Benutzer mit demselben Namen anlegen.

3voto

geekyouth Punkte 41

Localhost durch 127.0.0.1 ersetzen

es funktioniert bei mir

2voto

Lou Punkte 1857

Ich hatte das gleiche Problem wie OP, und die akzeptierte Antwort hat bei mir nicht funktioniert. In den Kommentaren der akzeptierten Antwort hat @Rathish eine Lösung gepostet, die bei mir funktioniert hat, ich wollte darauf aufmerksam machen.

Hier ist der Link:

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

Rathishs Lösung besteht darin, den Zugang für alle Benutzer zu sperren:

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

Außerdem weist er darauf hin, dass Sie die folgenden Tabellen abfragen können, indem Sie "user" und "host" auswählen, um festzustellen, ob Sie einen Restbenutzer aus einem früheren Vorgang haben:

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

Ich danke Ihnen!

2voto

user_19 Punkte 581

Diese Stelle MySQL ERROR 1045 (28000): Zugriff verweigert für Benutzer 'bill'@'localhost' (mit Passwort: YES) nützlich ist. Manchmal gibt es einen anonymen Benutzer ''@'localhost'' oder ''@'127.0.0.1''. Also, um das Problem zu lösen,

  1. zuerst den Benutzer löschen, dessen "Benutzer erstellen" fehlgeschlagen ist.

  2. Neuen Benutzer anlegen.

  3. Gewähren Sie dem neuen Benutzer die erforderlichen Berechtigungen.

  4. Flush-Privilegien.

2voto

Ich bin heute mit diesem Problem konfrontiert worden und habe es mit den folgenden Schritten gelöst:

1) Manuelles Einfügen der vom Benutzer bereitgestellten Werte von Pflichtfeldern 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)

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X