wake-up-neo.net

Wie erteilen Sie dem root-Benutzer in MySQL 8.0 alle Berechtigungen

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.

26
Praveen

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;
50
Mike Lischke

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.

5
J. Doe

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.

1

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.

1
Nuel Makara

Das hat bei mir funktioniert:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
1
ZERO

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!

0
Caos51

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:

  1. Benutzer löschen.
  2. Erstellen Sie den Benutzer erneut.
  3. Stellen Sie sicher, dass Sie die richtige Bindung für Ihre Konfigurationsdatei my.cnf haben. In meinem Fall habe ich die Zeile auskommentiert, da es sich nur um eine Sandbox-Umgebung handelt.

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!

0
Armando Juarez

Ü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.

0
zenglong chen