Ich kann anscheinend keinen einfachen Benutzer, den ich gelöscht habe, neu erstellen, selbst nicht als Root in MySQL.
Mein Fall: Benutzer 'jack' gab es schon einmal, 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 ausführe, z. B. 'jimmy', 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' als gültigen Benutzer für diese Installation von MySQL neu zu erstellen?
Siehe Beispiel unten. (Natürlich gab es ursprünglich viel Zeit zwischen der Schaffung 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)
quelle
Ja, dieser Fehler ist da. Ich habe jedoch eine kleine Problemumgehung gefunden.
Das sollte es lösen. Angenommen, wir möchten den Benutzer admin @ localhost erstellen, sind dies die folgenden Befehle:
Prost
quelle
Dieser Fehler befindet sich seit 2007 auf bugs.mysql.com und dieser Thread ist hauptsächlich nur ein Papagei all dieser falschen Antworten bis vor einem Jahr.
Gemäß der MySQL - Dokumentation, Befehle wie
CREATE USER
,GRANT
,REVOKE
undDROP USER
benötigt keinen nachfolgendenFLUSH PRIVILEGES
Befehl. Es ist ziemlich klar warum, wenn man die Dokumente liest. Dies liegt daran, dass durch direktes Ändern der MySQL-Tabellen die Informationen nicht erneut in den Speicher geladen werden. Die Fülle an Lösungen für diesen Fehler behauptet jedoch, dass diesFLUSH PRIVILEGES
die Antwort ist.Dies kann auch nicht einmal ein Fehler sein. Es handelt sich um eine Dokumentationsverschwörung - Dokumente variieren an einer kritischen Stelle von Version zu Version.
13.7.1.2. DROP USER Syntax
...
...
Wenn Sie nur den Benutzernamen-Teil des Kontonamens angeben, wird ein Hostnamen-Teil von '%' verwendet.
DROP USER
Wie in MySQL 5.0.0 vorhanden, werden nur Konten entfernt, die keine Berechtigungen haben. In MySQL 5.0.2 wurde es geändert, um auch Kontoberechtigungen zu entfernen. Dies bedeutet, dass das Verfahren zum Entfernen eines Kontos von Ihrer MySQL-Version abhängt.Ab MySQL 5.0.2 können Sie ein Konto und seine Berechtigungen wie folgt entfernen:
Die Anweisung entfernt Berechtigungszeilen für das Konto aus allen Grant-Tabellen.
Das einzige Mal, wenn ich diesen Fehler erhalte, ist, wenn ich es tue
DROP USER user
; Wie das Dokument vorschlägt, behandelt MySQL das '%' jedoch nicht als Platzhalter, sodass alle Benutzer auf allen Hosts gelöscht werden. Es ist doch nicht so wild. Oder es kann sein, dass es manchmal funktioniert, wenn der localhost-Benutzer gelöscht wird und dann versucht wird, den bei% zu löschen.Mir ist klar, dass beim Versuch, den Benutzer bei% zu löschen, eine Fehlermeldung ausgegeben und beendet wird. Das anschließende
CREATE USER
bei localhost schlägt fehl, da der localhost-Benutzer nie gelöscht wurde. Es scheint nicht nötig zu sein, Zeit damit zu verschwenden, in den Grant-Tabellen nach Geistern zu suchen, wie ein Poster vorschlug.Ich sehe 7 Stimmen für:
Welches als
DROP USER 'jack@localhost'@'%';
# falsch interpretiert wirdEs scheint tatsächlich einen echten Fehler zu geben, der dieselbe Fehlermeldung generiert, aber er hat damit zu tun, dass der zuerst erstellte Benutzer (nach einer neuen MySQL-Server-Installation) gelöscht wird. Ob dieser Fehler behoben wurde, weiß ich nicht. aber ich erinnere mich nicht daran, dass dies in letzter Zeit passiert ist und ich bin zu diesem Zeitpunkt auf Version 5.5.27.
quelle
mariadb-server-5.5.60-1.el7_5.x86_64
Wenn Sie eine
DELETE
Anweisung in dermysql.user
Tabelle verwenden, um einen Benutzer zu entfernen, und dann versuchen, den Benutzer mit wiederherzustellenCREATE USER
, wird eine1396
Fehlermeldung angezeigt. Beheben Sie diesen Fehler, indem Sie ausführenDROP USER 'username'@'host';
(Sie erhalten 1396 Fehler, wenn Sie versuchen, die Buchse neu zu erstellen.)
(Raus aus dieser Situation, indem du rennst
DROP USER
)(Ich nehme an, es
FLUSH PRIVILEGES
kann nicht schaden, aber lassen Sie den Benutzer definitiv zuerst fallen.)quelle
Sie sollten Benutzer auf diese Weise nicht manuell löschen. MySQL verfügt über eine
REVOKE
Syntax zum Entfernen undDROP USER
Löschen von Berechtigungen :Verwenden Sie am besten die bereitgestellten Tools, anstatt im Hintergrund herumzuspielen.
quelle
flush privileges
in erster Linie? Die offizielle MySQL docs tun redet über Sachen wiedelete from user where user = 'jack';
undflush privileges
. Warum sagen Sie, dass sie nicht Teil der bereitgestellten Tools sind?'jack@localhost'
sollte wohl'jack'@'localhost'
hier sein.Löschen Sie den Benutzer, löschen Sie die Berechtigungen. Erstellen Sie dann den Benutzer. Es funktioniert!
quelle
Versuchen Sie
delete from mysql.db where user = 'jack'
, einen Benutzer zu erstellenquelle
In MySQL 5.6
Drop user userid;
funktioniert die Verwendung nicht. Verwenden Sie:Drop user 'userid'@'localhost';
und / oderDrop user 'userid'@'%';
. Auf diese Weise konnte ich den Benutzer löschen und neu erstellen.quelle
quelle
Überprüfen Sie, ob dies der Fall ist
oder
quelle
Wenn Sie einen Benutzer mit SQL löschen möchten, müssen Sie die entsprechenden Daten in diesen Tabellen löschen:
columns_priv
,db
,procs_priv
,tables_priv
. Dann ausführenflush privileges;
quelle
Lustigerweise hat die MySQL-Workbench es für mich gelöst. Auf der Registerkarte Administration -> Benutzer und Berechtigungen wurde der Benutzer mit einem Fehler aufgelistet. Die Verwendung der Löschoption löste das Problem.
quelle
Eine einfache Lösung für dieses Problem. Da der Befehl "Löschen" nur den Benutzerdatensatz in der Tabelle "Benutzer" der Datenbank "MySQL" entfernt, können wir ihn wieder hinzufügen und den Benutzer dann vollständig löschen. Dann könnten Sie einen Benutzer mit demselben Namen erstellen.
Schritt 1. Suchen Sie das Datensatzformat der Benutzertabelle in der MySQL-Datenbank
Schritt 2. Erstellen Sie gemäß den in Schritt 1 gezeigten Spalten einen Dummy-Datensatz mit dem Benutzernamen. Fügen Sie es in die Tabelle ein. Denken Sie beispielsweise daran, den "Benutzernamen" durch Ihren Benutzernamen zu ersetzen.
Hinweis: Manchmal können beim Einfügen Probleme auftreten. Ändern Sie einfach die Daten, damit sie funktionieren.
Schritt 3. Löschen Sie den Benutzer.
Jetzt können Sie einen Benutzer mit demselben Namen erstellen.
quelle
Dieser Beitrag MySQL ERROR 1045 (28000): Zugriff für Benutzer 'bill' @ 'localhost' verweigert (mit Passwort: YES) ist nützlich. Manchmal gibt es einen anonymen Benutzer '' @ 'localhost' oder '' @ '127.0.0.1'. Um das Problem zu lösen,
Löschen Sie zuerst den Benutzer, dessen 'Benutzer erstellen' fehlgeschlagen ist.
Neuen Benutzer erstellen.
Gewähren Sie dem neuen Benutzer die erforderlichen Berechtigungen.
Berechtigungen spülen.
quelle
Ich hatte den gleichen Fehler. Aber befehle "FLUSH PRIVILEGES"; hat nicht geholfen. Das hat mir gefallen:
quelle
Der MySQL-Server wird mit der Option --skip-grant-tables ausgeführt, sodass diese Anweisung nicht ausgeführt werden kann
quelle
Ich weiß, dass dies alt ist, aber da es das erste Ergebnis in Google ist, dachte ich, ich sollte meine Lösung hinzufügen. In meinem Fall funktionierte das Löschen des Benutzers einwandfrei, aber die Neuerstellung des Benutzers ergab "FEHLER 2013 (HY000): Verbindung zum MySQL-Server während der Abfrage verloren" und "FEHLER 2006 (HY000): MySQL-Server ist verschwunden". Ich habe die Flush-Berechtigungen -> Benutzerlösung löschen ausprobiert, hatte aber immer noch den gleichen Fehler.
In meinem Fall war der Fehler auf ein MySQL-Upgrade von 5.1 -> 5.6 zurückzuführen. Beim Anzeigen der Fehlerprotokolle wurde festgestellt, dass mysql_upgrade ausgeführt werden soll. Hat das funktioniert und meine Anweisung zum Erstellen eines Benutzers hat gut funktioniert!
quelle
Ich habe kürzlich diesen Fehler erhalten.
Was für mich funktioniert hat, ist das Einchecken der MySQL-Workbench 'Benutzer und Berechtigungen' und das Erkennen, dass noch Benutzer vorhanden sind.
Nachdem ich es von dort gelöscht hatte, konnte ich den Benutzer neu erstellen.
quelle
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Starten Sie den Server neu:
# mysql.server restart
Dann mach deinen
CREATE USER
Befehl.quelle
CREATE
nach festgestelltDELETE
.Ich bin heute mit diesem Problem konfrontiert und habe es durch die folgenden Schritte behoben:
1) manuelles Einfügen des störenden Benutzers, der den Wert der Pflichtfelder angibt, in
mysql.user
2)
3) A.
4) A.
B. B.
Hoffe das hilft.
quelle
Löschen Sie einfach die benutzerbezogenen Daten aus mysql.db (möglicherweise auch aus anderen Tabellen) und erstellen Sie beide neu.
quelle
Ich hatte auch das gleiche Problem, nach wenigen Suchen fand ich eine Lösung, die für mich funktionierte. Ich hoffe, es wird Ihnen helfen. Da Sie bereits Benutzer erstellt haben, versuchen Sie nun, eine
FLUSH PRIVILEGES
auf Ihrer MySQL-Konsole auszuführen. Dieses Problem ist bereits im MySql-Fehlerbeitrag enthalten. Sie können dies auch überprüfen. Jetzt können Sie nach dem Spülen einen neuen Benutzer erstellen. Befolgen Sie die folgenden Schritte:Jetzt können Sie die MySQL-Konsole sehen.
Anstelle des Benutzernamens können Sie den gewünschten Benutzernamen eingeben. Wenn Sie MySQL auf Ihrem lokalen Computer ausführen , geben Sie "localhost" anstelle des Hosts ein. Andernfalls geben Sie Ihren Servernamen an, auf den Sie zugreifen möchten.
Beispiel: CREATE USER smruti @ localhost IDENTIFIED by 'hello';
Jetzt wird ein neuer Benutzer erstellt. Wenn Sie allen Zugriff gewähren möchten, geben Sie ein
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Jetzt können Sie MySQL beenden, indem Sie
\q
.Now erneut anmeldenmysql -u newusername -p
Drücken Sie dann die Eingabetaste. Sie können alles sehen.Hoffe das hilft.
quelle