web-dev-qa-db-fra.com

Comment octroyer tous les privilèges à l'utilisateur root dans MySQL 8.0

A tenté

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

Obtenir

ERREUR 1064 (42000): vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel que correspond à la version de votre serveur MySQL pour la syntaxe à utiliser près de la racine 'IDENTIFIED BY' avec WITH GRANT OPTION à la ligne 1.

Note: La même chose fonctionne quand on essaye dans MySQL 5.7

Aussi essayé

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

Obtenir

ERREUR 1410 (42000): vous n'êtes pas autorisé à créer un utilisateur avec GRANT

Le nom d'utilisateur/mot de passe MySQL (8.0.11.0) est root/root.

26
Praveen

Depuis MySQL 8, vous ne pouvez plus (implicitement) créer un utilisateur à l’aide de la commande GRANT. Utilisez CREATE USER à la place, suivi de l'instruction GRANT :

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
50
Mike Lischke

1) Cela a fonctionné pour moi. Tout d'abord, créez un nouvel utilisateur. Exemple: comme 'foo' avec pw 'bar.enter code ici

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2) Remplacez le code ci-dessous par un nom d'utilisateur avec «foo».

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

Remarque: nom_base_de_données est la base de données pour laquelle vous souhaitez avoir des privilèges,. signifie tout sur tous

3) Connectez-vous en tant qu'utilisateur foo

mysql> mysql -u foo -p

Mot de passe: bar

4) Assurez-vous que votre connexion initiale à partir de Sequelize est définie sur foo avec pw bar.

5
J. Doe

L’utilisateur spécifié n’existe tout simplement pas sur votre serveur MySQL (MySQL essaie donc de le créer avec GRANT comme il le faisait avant la version 8, mais échoue avec les limitations introduites dans cette version).

MySQL est assez stupide à ce stade. Par conséquent, si vous utilisez 'root' @ 'localhost' et tentez d'octroyer des privilèges à 'root' @ '%', il les traite comme des utilisateurs différents plutôt que comme une notion généralisée pour l'utilisateur root de tout hôte, y compris localhost.

Le message d'erreur est également trompeur.

Donc, si vous recevez le message d'erreur, vérifiez vos utilisateurs existants avec quelque chose comme ça

SELECT CONCAT("'", user, "'@'", Host, "'") FROM mysql.user;

puis créez un utilisateur manquant (selon l'avis de Mike) ou ajustez votre commande GRANT en fonction des spécifications de l'utilisateur existant.

1

Mes spécifications:

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

Ce qui a fonctionné pour moi:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

Réponse dans les deux requêtes:

Query OK, O rows affected (0.10 sec*)

NB: J'ai déjà créé une base de données (nom_base) et je créais des informations d'identification avec tous les privilèges accordés à toutes les tables de la base de données au lieu d'utiliser l'utilisateur root par défaut, ce que j'ai lu quelque part, est une pratique recommandée.

1
Nuel Makara

Cela a fonctionné pour moi:

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

Eh bien, je viens d'avoir le même problème. Même si la route avait '%', impossible de se connecter à distance. Maintenant, en regardant le fichier my.ini (fichier de configuration dans Windows), l'instruction bind-address a été manquée.

Alors ... j'ai mis ce bind-address = * après [mysqld] et redémarré le service. Maintenant ça marche!

0
Caos51

Juste mes 2 cents sur le sujet. J'avais exactement le même problème lorsque j'essayais de me connecter à partir de MySQL Workbench. J'utilise une machine virtuelle bitnami-mysql pour configurer un sandbox local pour le développement.

Le tutoriel de Bitnami indiquait qu'il fallait exécuter la commande "Accorder tous les privilèges":

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

Cela ne fonctionnait clairement pas, j'ai finalement réussi à utiliser la réponse de Mike Lischke.

Je pense que ce qui s’est passé est que l’utilisateur racine @% est associé à de mauvaises informations d’identité. Donc, si vous avez essayé de modifier les privilèges de l'utilisateur et sans succès, essayez:

  1. Laisser tomber l'utilisateur.
  2. Créez à nouveau l'utilisateur.
  3. Assurez-vous que la liaison est correcte sur votre fichier de configuration my.cnf. Dans mon cas, j'ai commenté la ligne, car c'est juste pour un environnement sandbox.

De la console Mysql:

Liste des utilisateurs (utile pour voir tous vos utilisateurs):

select user, Host from mysql.user;

Supprimer l'utilisateur souhaité:

drop user '{{ username }}'@'%';

Créer un utilisateur et accorder des autorisations:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

Exécutez cette commande:

FLUSH PRIVILEGES;

Localisez votre fichier de configuration mysql 'my.cnf' et cherchez une ligne qui ressemble à ceci:

bind-address=127.0.0.1

et commentez en utilisant un '#':

#bind-address=127.0.0.1

Puis redémarrez votre service mysql.

J'espère que cela aide quelqu'un qui a le même problème!

0
Armando Juarez

Vérifiez votre nom d'utilisateur et le domaine est le même que créé auparavant. Mysql sélectionne le compte en fonction des deux colonnes de la table utilisateur. S'il est différent, mysql peut penser que vous souhaitez créer un nouveau compte par subvention, qui n'est plus prise en charge après la version 8.0.

0
zenglong chen