214 votes

Comment accorder tous les privilèges à l'utilisateur Root dans MySQL 8.0

Essayé

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

Obtenir

ERREUR 1064 (42000) : Vous avez une erreur dans votre correspond à votre version du serveur MySQL pour connaître la bonne syntaxe à utiliser près de 'IDENTIFIED BY 'Root' WITH GRANT OPTION' à la ligne 1.

Note : La même chose fonctionne dans les versions précédentes.

A également 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 de MySQL (8.0.11.0) est Root/Root.

0 votes

Vous connectez-vous directement à mysql ou utilisez-vous ssh ?

0 votes

Directement à partir de l'invite de commande en tant qu'utilisateur root

1 votes

Voir les différences entre 13.7.1.6 Syntaxe GRANT y 13.7.1.4 Syntaxe GRANT .

399voto

Mike Lischke Points 4860

À partir de MySQL 8, vous ne pouvez plus créer (implicitement) un utilisateur à l'aide de la commande GRANT commande. Utiliser CREER UN UTILISATEUR au lieu de cela, suivi par le AIDE NON REMBOURSABLE déclaration :

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

Attention sur les risques de sécurité concernant WITH GRANT OPTION voir :

12 votes

Cette commande crée un nouvel utilisateur. Mais je veux accorder des privilèges à l'utilisateur Root existant. mysql> CREATE USER 'Root'@'%' IDENTIFIED BY 'Root' ; Query OK, 0 rows affected (0.31 sec) mysql> GRANT ALL PRIVILEGES ON . TO 'Root'@'%' WITH GRANT OPTION ; Query OK, 0 rows affected (0.16 sec) mysql> SELECT User FROM mysql.user ; +------------------+ | User | +------------------+ | Root | | | mysql.infoschema | | mysql.session | | mysql.sys | | Root | +------------------+ 5 rows in set (0.00 sec)

0 votes

Maintenant, deux utilisateurs avec le nom Root sont présents dans la table des utilisateurs ! Je ne peux pas non plus me connecter à distance (utilisateur Root). ------------- Détails : Type : com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException SQL State : 08001

0 votes

Bizarre. Le message d'erreur dans votre question indique que cet utilisateur n'existe pas. C'est la seule raison pour laquelle j'ai suggéré de le créer d'abord. Et il est impossible d'avoir deux fois le même utilisateur dans une même instance MySQL. Ils diffèrent soit par le nom, soit par la partie hôte.

102voto

bigdatadev Points 224

Je vois beaucoup de (mauvaises) réponses, c'est aussi simple que cela :

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'P@ssW0rd';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

Note : au lieu d'un user vous pouvez utiliser root pour se connecter à la base de données. Cependant, l'utilisation du compte Root par défaut pour permettre à une application de se connecter à la base de données n'est pas la meilleure solution.

Privilèges alternatifs (soyez prudent et souvenez-vous du principe du moindre privilège) :

-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';

-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';

-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';

Si vous rencontrez l'erreur suivante :

ERREUR 1130 (HY000) : L'hôte '1.2.3.4' n'est pas autorisé à se connecter à ce serveur. serveur MySQL

Vous devez ajouter/modifier les deux lignes suivantes dans /etc/mysql/my.cnf et redémarrer mysql :

bind-address           = 0.0.0.0
skip-networking

0 votes

Pourriez-vous expliquer pourquoi cela ne fonctionne pas au lieu de vous contenter de vous plaindre ? Je pourrais ainsi vous aider ou publier des informations complémentaires.

0 votes

Cette réponse n'aborde même pas la question de la Racine le privilège de l'utilisateur.

0 votes

Mise à jour de la réponse en conséquence.

41voto

J. Doe Points 165

1) Ceci a fonctionné pour moi. Tout d'abord, créez un nouvel utilisateur. Exemple : Utilisateur foo avec mot de passe bar

> 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 : le nom de la base de données est la base de données pour laquelle vous souhaitez obtenir des privilèges, . signifie tout sur tout

3) Se connecter 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.

6 votes

Cela ne répond pas, loin s'en faut, à la question posée. Il s'agit d'autorisations globales, et non d'autorisations spécifiques à une base de données.

8voto

Nuel Makara Points 39

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 cas :

Query OK, O rows affected (0.10 sec*)

N.B : J'ai créé une base de données (db_name) plus tôt et j'ai créé un identifiant utilisateur 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 qui, d'après ce que j'ai lu quelque part, est une bonne pratique.

7voto

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

MySQL est assez bête à ce stade, donc si vous avez 'Root'@'localhost' et que vous essayez d'accorder 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 sur n'importe quel hôte, y compris localhost.

Le message d'erreur est également trompeur.

Donc, si vous obtenez le message d'erreur, vérifiez vos utilisateurs existants avec quelque chose comme ceci

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

et créez l'utilisateur manquant (comme Mike l'a conseillé) ou adaptez votre commande GRANT à la spécification de l'utilisateur existant.

1 votes

C'était une solution valable pour moi ! Je n'avais tout simplement pas tapé la ligne user@ avec précision. Veillez à vérifier ce point avant d'essayer les autres solutions proposées. Pour moi, c'était : CREATE USER 'user'@'%domain.com' et lorsque j'ai émis la déclaration GRANT, ma syntaxe était décalée d'un '. Cela ressemblait à ceci GRANT .... TO 'user'@'%.domain.com'. J'ai oublié de mettre le '.' dans ma déclaration de création et cela a fait toute la différence dans la résolution de ce problème.

0 votes

Cette réponse devrait être acceptée ! Même chose, c'est ce qui suit @ qui compte et qui doit être correct. Mysql stupide

0 votes

Cette réponse est valable, merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X