Question

J'ai un problème avec l'utilisateur root MySQL dans la configuration de My MySQL et je ne peux pas, pour la vie, déterminer comment le réparer. Il semble que j'ai en quelque sorte foiré l'utilisateur root et que mon accès aux bases de données est maintenant très irrégulier.

Pour référence, j'utilise MAMP sur OS X pour fournir le serveur MySQL. Je ne sais pas trop ce qui compte, mais je suppose que tout ce que j'ai fait nécessitera un correctif en ligne de commande pour le résoudre.

Je peux démarrer MySQL avec MAMP comme d'habitude et accéder aux bases de données à l'aide des utilisateurs "standard" que j'ai créés pour mes applications PHP. Cependant, l'utilisateur root, que j'utilise dans mon client d'interface graphique MySQL, ainsi que dans phpMyAdmin, ne peut accéder qu'au "schéma d'information". base de données, ainsi que deux que j’ai créées manuellement et, vraisemblablement (par erreur), ont laissé les autorisations grandes ouvertes pour. Mes 15 autres bases de données ne sont pas accessibles à l'utilisateur root. Quand je charge phpMyAdmin, l’écran d’accueil dit: "Créer une nouvelle base de données: pas de privilèges".

À un moment donné, j'ai certainement changé le mot de passe de mon utilisateur root à l'aide de la boîte de dialogue MAMP. Mais je ne me souviens pas si j'ai fait autre chose qui aurait pu causer ce problème. J'ai de nouveau essayé de changer le mot de passe et le problème ne semble pas changer.

J'ai également essayé de réinitialiser le mot de passe root à l'aide de la ligne de commande, notamment en démarrant manuellement mysql avec l'option --skip-grant-tables, puis en supprimant les privilèges, mais là encore, rien ne semble résoudre le problème.

Je suis arrivé au bout de mes idées et j'apprécierais beaucoup les conseils et le diagnostic étape par étape d'un des experts ici!

Merci beaucoup pour votre aide.

Était-ce utile?

La solution

C’est parce que MAMP et la ligne de commande mysql (et le tout mysql sauf MAMP) sont différents.

MAMP a sa propre version dans mysql et vous ne pouvez pas y accéder via la ligne de commande, seule la version dans phpmyadmin.

c’est mon expérience, j’ai MAMP et utilise l’autre mysql pour ruby ??on rails et d’autres choses.

Autres conseils

J'avais le même problème: un seul compte utilisateur travaillait pour accéder aux bases de données mysql via la console d'administration ou le navigateur de requêtes. Lorsque j'ai utilisé les tables skip-grant-tables, tous les comptes ont pu se connecter, y compris le compte root.

Je l'ai vu comme un bogue remontant à 2006 , mais le dernière entrée, il n’existe pas de commande pouvant être exécutée en mode skip-grant-tables, je n’avais donc toujours pas résolu le problème.

Ce qui m'a aidé
Cette réponse est similaire à celle décrite par Ben Bakelaar dans le lien ci-dessus . Le problème survient lorsque l'indicateur de résolution de nom est désactivé sur votre my.ini (saut-nom-résolution). Cela tue la capacité de mysql à résoudre 'localhost' et la table mysql.user n'a qu'une entrée pour localhost / root.

Mettez à jour à la place l'entrée localhost de votre table mysql.user afin qu'elle soit 127.0.0.1, et vous pouvez vous connecter aux consoles locales même avec la fonction de résolution de nom par saut activée.

Essayez de démarrer le serveur avec --skip-grant-tables puis vérifiez les tables de privilèges dans la base de données mysql:

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

Vous pouvez également essayer:

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

Une fois entré, vous pouvez le faire pour tenter de donner à root des privilèges complets:

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

Votre commentaire indique vos privilèges root actuels (sans --skip-grant-tables). C'est bien que vous n'ayez aucune entrée pour 'root' @ ''% ', vous ne l'avez pas par défaut et vous pouvez considérer cela comme une mesure de sécurité.

Il semble que vous ayez gâché vos privilèges 'root' @ 'localhost' . DONNER TOUT PRIVILÈGES SUR. est étrange. En général, vous disposez de quelque chose comme AGRANDIR TOUS LES PRIVILÈGES SUR *. * ou GRANT TOUS LES PRIVILÈGES SUR myDatabase.myTable . Votre GRANT ne spécifie pas les bases de données et / ou les tables pour lesquelles des privilèges sont accordés. Je ne sais pas du tout comment votre client a réussi à le produire. Je ne peux pas le reproduire avec le client en ligne de commande mysql (chaînes vides essayées, espaces, guillemets ...), mysql refuse l’instruction GRANT (qui, bien sûr, est le comportement correct). On dirait que MAMP fait quelque chose de vraiment étrange. Étant donné que je ne peux pas reproduire un GRANT comme le vôtre, je ne peux pas dire comment mysql l'interprète, mais je suppose qu'il a défini les privilèges sur 'N' au niveau mondial.

Pour résoudre ce problème, vous avez besoin d'un utilisateur disposant des privilèges appropriés. En général, vous avez un utilisateur 'root' @ 'localhost' et un 'root' @ 'votre-hostname' . Si vous avez de la chance, 'racine' @ 'votre nom d'hôte' est toujours correct. Afair, les connexions mysql fonctionnent comme suit: Si vous vous connectez à localhost , vous vous connectez en tant que 'root' @ 'localhost' (vous n'êtes pas sûr de 127.0.0.1 , je suppose que c’est aussi 'racine' @ 'localhost' ). Si vous vous connectez à votre-nom-hôte , vous vous connectez en tant que 'racine' @ 'votre-nom-hôte' . Si les privilèges de cet utilisateur sont toujours corrects, vous pouvez les mettre à jour pour 'root' @ 'localhost' et vous avez terminé.

Dans votre commentaire, vous indiquez que vous ne pouvez pas vous connecter via 127.0.0.1 car le socket se trouve dans un endroit inhabituel. Je suppose que vous interprétez mal l’erreur. IIRC vous vous connectez via socket si vous vous connectez à 'localhost' , mais via TCP / IP si vous vous connectez à 127.0.0.1 ou votre-hostname . Si mysql essaie de se connecter via socket et ne peut pas trouver le socket (car vous n’avez pas spécifié le bon emplacement), le message d’erreur indique où mysql a tenté de trouver le socket. Votre message d'erreur ne le fait pas. Je suppose que votre erreur est une erreur de réseau. Peut-être avez-vous démarré le serveur mysql avec l'option - skip-networking , ou votre configuration spécifie une adresse de liaison incorrecte. Vous devez d'abord résoudre ce problème, sinon vous ne pourrez pas vous connecter en tant que 'racine' @ 'votre nom d'hôte' .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top