Versucht
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
Bekommen
ERROR 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, dass entspricht Ihrer MySQL-Server-Version für die richtige Syntax, um nahe 'IDENTIFIED BY' root 'WITH GRANT OPTION' in Zeile 1 zu verwenden.
Anmerkung: Das Gleiche funktioniert, wenn Sie es in MySQL 5.7 versuchen
Auch versucht
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Bekommen
FEHLER 1410 (42000): Sie dürfen keinen Benutzer mit GRANT anlegen
MySQL (8.0.11.0) Benutzername/Passwort ist root/root.
Ab MySQL 8 können Sie mit dem Befehl GRANT
(implizit) keinen Benutzer mehr erstellen. Verwenden Sie stattdessen CREATE USER , gefolgt von der Anweisung GRANT :
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
1) Das hat für mich funktioniert. Erstellen Sie zuerst einen neuen Benutzer. Beispiel: hier als 'foo' mit pw 'bar.enter code
> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';
2) Ersetzen Sie den folgenden Code durch einen Benutzernamen durch 'foo'.
> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';
Hinweis: Datenbankname ist die Datenbank, für die Sie Berechtigungen haben möchten, . bedeutet alles auf alles
3) Melden Sie sich als Benutzer foo an
mysql> mysql -u foo -p
Passwort: bar
4) Stellen Sie sicher, dass Ihre erste Verbindung von Sequelize auf Foo mit der Pw-Leiste eingestellt ist.
Der angegebene Benutzer existiert einfach nicht in Ihrem MySQL (daher versucht MySQL, ihn mit GRANT wie vor Version 8 zu erstellen, scheitert jedoch mit den in dieser Version eingeführten Einschränkungen).
MySQL ist zu diesem Zeitpunkt ziemlich dumm. Wenn Sie also über 'root' @ 'localhost' verfügen und versuchen, 'root' @ '%' Berechtigungen zu erteilen, werden diese als unterschiedliche Benutzer behandelt, und nicht als allgemeiner Begriff für root-Benutzer auf einem beliebigen Host, einschließlich localhost.
Die Fehlermeldung ist auch irreführend.
Wenn Sie also die Fehlermeldung erhalten, überprüfen Sie Ihre vorhandenen Benutzer mit so etwas
SELECT CONCAT("'", user, "'@'", Host, "'") FROM mysql.user;
und erstellen Sie dann einen fehlenden Benutzer (wie von Mike empfohlen) oder passen Sie Ihren GRANT-Befehl an die tatsächlich vorhandene Benutzerspezifikation an.
My Specs:
mysql --version
mysql Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)
Was hat bei mir funktioniert:
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;
Antwort in beiden Fragen:
Query OK, O rows affected (0.10 sec*)
NB: Ich habe zuvor eine Datenbank (db_name) erstellt und einen Benutzer-Berechtigungsnachweis mit allen Berechtigungen für alle Tabellen in der Datenbank erstellt, anstatt den Standard-Root-Benutzer zu verwenden, den ich irgendwo gelesen habe. Dies ist eine bewährte Methode.
Das hat bei mir funktioniert:
mysql> FLUSH PRIVILEGES
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
Nun, ich hatte gerade das gleiche Problem. Selbst wenn die Route "%" hatte, konnte keine Fernverbindung hergestellt werden. Beim Betrachten der my.ini
-Datei (Konfigurationsdatei in Windows) wurde die bind-address
-Anweisung nicht ausgeführt.
Also ... Ich habe diesen bind-address = *
nach [mysqld]
gesetzt und den Dienst neu gestartet. Jetzt gehts!
Nur meine 2 Cent zum Thema. Ich hatte genau das gleiche Problem beim Versuch, eine Verbindung über MySQL Workbench herzustellen. Ich verwende eine virtuelle bitnami-mysql-Maschine, um eine lokale Sandbox für die Entwicklung einzurichten.
Das Tutorial von Bitnami soll den Befehl 'Grant All Privileges' ausführen:
/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";
Das hat eindeutig nicht funktioniert, ich habe es endlich geschafft, mit der Antwort von Mike Lischke zu arbeiten.
Ich denke, es ist passiert, dass dem Benutzer root @% die falschen Anmeldeinformationen zugeordnet wurden. Wenn Sie also versucht haben, die Berechtigungen des Benutzers zu ändern, und kein Glück haben, versuchen Sie Folgendes:
In der MySQL-Konsole:
Benutzer auflisten (hilfreich, um alle Benutzer anzuzeigen):
select user, Host from mysql.user;
Gewünschten Benutzer löschen:
drop user '{{ username }}'@'%';
Benutzer erstellen und Berechtigungen erteilen:
CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;
Führen Sie diesen Befehl aus:
FLUSH PRIVILEGES;
Suchen Sie Ihre mysql-Konfigurationsdatei 'my.cnf' und suchen Sie nach einer Zeile, die so aussieht:
bind-address=127.0.0.1
und kommentiere es mit einem '#':
#bind-address=127.0.0.1
Starten Sie dann Ihren MySQL-Dienst neu.
Hoffe das hilft jemandem mit dem gleichen Problem!
Überprüfen Sie, ob Ihr Benutzername und Ihre Domain mit den zuvor erstellten übereinstimmen. MySQL-Konto anhand der beiden Spalten in der Benutzertabelle auswählen. Wenn dies nicht der Fall ist, könnte MySQL den Eindruck haben, dass Sie ein neues Konto per Grant erstellen möchten, das nach Version 8.0 nicht mehr unterstützt wird.