web-dev-qa-db-fra.com

ERREUR 1044 (42000): accès refusé pour «root» avec tous les privilèges

J'ai une étrange erreur. Je suis connecté à Mysql local en tant que root via la ligne de commande. Après avoir créé la base de données:

create database some_db;

Donner ensuite des privilèges à un utilisateur:

grant all privileges on some_db.* to some_user@'localhost' identified by 'password';

Cela donne une erreur:

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'some_db'

Les autorisations pour la racine (show grant;) montrent:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*8919C53DC7A4DFBF3F8584382E96463583EB7FDA' 

Je m'assure également que je suis connecté en tant que root:

select current_user();

Et cela confirme que je suis connecté en tant que 'root' @ 'localhost'

J'ai créé la base de données et affecté l'utilisateur plusieurs fois et je n'ai jamais eu de problème. Pourquoi je ne peux pas affecter d'utilisateur à la base de données créée par root lorsque je suis connecté en tant que root?

p.s. à partir d'autres messages, je pense que le problème peut être dû à des utilisateurs étranges

select Host, user from mysql.user;

Certains utilisateurs que je n'ai pas ajoutés mais apparaissent:

 MY_COMPuTER_name.local |       ''
 MY_COMPuTER_name.local |     root

J'ai essayé de supprimer ces utilisateurs

drop user 'root'@'MY_COMPuTER_name.local';
drop user ''@'MY_COMPuTER_name.local';

Cependant, bien qu'il indique que l'exécution de la requête a réussi, les utilisateurs ne sont pas supprimés même après les privilèges de vidage. Pourquoi je ne peux pas supprimer d'utilisateurs? Toute aide est très appréciée

21
latvian

Tout d'abord, identifiez l'utilisateur sous lequel vous êtes connecté:

 select user();
 select current_user();

Le résultat de la première commande est ce que vous avez tenté de vous connecter en tant que, la seconde est ce que vous avez réellement connecté en tant que. Confirmez que vous êtes connecté en tant que root@localhost dans mysql.

Grant_priv à root@localhost. Voici comment vous pouvez vérifier.

mysql> SELECT Host,user,password,Grant_priv,Super_priv FROM mysql.user;
+-----------+------------------+-------------------------------------------+------------+------------+
| Host      | user             | password                                  | Grant_priv | Super_priv |
+-----------+------------------+-------------------------------------------+------------+------------+
| localhost | root             | ***************************************** | N          | Y          |
| localhost | debian-sys-maint | ***************************************** | Y          | Y          |
| localhost | staging          | ***************************************** | N          | N          |
+-----------+------------------+-------------------------------------------+------------+------------+

Vous pouvez voir que Grant_priv est défini sur N pour root @ localhost. Cela doit être Y. Voici comment résoudre ce problème:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';

Je me suis reconnecté, c'était bien.

43

Si vous obtenez une erreur 1044 (42000) lorsque vous essayez d'exécuter des commandes SQL dans MySQL (installé sur le serveur XAMPP), l'invite cmd, alors voici la solution:

  1. Fermez votre invite de commande MySQL.

  2. Ouvrez votre invite cmd (depuis le menu Démarrer -> exécuter -> cmd) qui affichera: C:\Users\User> _

  3. Accédez à MySQL.exe en tapant les commandes suivantes:

C:\Users\User>cd\ C:\>cd xampp C:\xampp>cd mysql C:\xxampp\mysql>cd bin C:\xampp\mysql\bin>mysql -u root

  1. Essayez maintenant de créer une nouvelle base de données en tapant:

    mysql> create database employee;
    

    s'il montre:

    Query OK, 1 row affected (0.00 sec)
    mysql>
    

    Alors bravo! Tu es prêt...

2
Ashwin

La raison pour laquelle je n'ai pas pu supprimer certains des utilisateurs via l'instruction 'drop' est qu'il y a un bogue dans Mysql http://bugs.mysql.com/bug.php?id=62255 avec le nom d'hôte contenant lettres capitales. La solution exécutait la requête suivante:

DELETE FROM mysql.user where Host='Some_Host_With_UpperCase_Letters';

J'essaie toujours de comprendre l'autre problème où l'utilisateur root avec toutes les autorisations ne peut pas accorder de privilèges au nouvel utilisateur pour une base de données particulière

1
latvian