|  |  
 
L'erreur " Access denied" (accès refusé) peut survenir lors d'une tentative de connexion à MySQL. Voici une liste de problème type qui peuvent être la cause d'un tel comportement, et leur solution : 
Avez vous exécuté le script mysql_install_dbaprès avoir installé MySQL, pour créer les premières lignes dans les tables de droits ? Si non, faites le.   6.10  Droits initiaux. Testez les droits initaux en exécutant la commande suivante : 
shell> mysql -u root test
 
Le serveur doit vous autoriser la connexion sans erreur. Assurez vous aussi que vous avez un fichier appelé ``user.ISD'' dans le dossier de MySQL. Généralement, il se trouve là : ``PATH/var/mysql/user.ISD'', Avec PATHqui représente le chemin jusqu'à la racine de l'installation de MySQL. 
Après une installation, il vaut mieux vous connecter au serveur, et mettre en place des utilisateurs et leur permissions.
 
shell> mysql -u root mysql
 
Le serveur autorisera la connexion car l'utilisateur MySQL rootn'a pas de mot de passe à l'origine. Etant donné que cela crée un gros risque au niveau de la sécurité de la base, affecter un mot de passe à l'utilisateurrootdoit être une priorité lorsque vous créez les utilisateurs de votre serveur. Si, lors de la connexion en tant queroot, vous obtenez l'erreur suivante : 
Access denied for user: '@unknown' to database mysql
 
Cela signifie que vous n'avez pas de ligne dans la table useravec la valeur'root' dans la colonneUseret quemysqldn'a pas pu trouver votre hôte dans cette table. Dans ce cas, vous devez redémarrer le serveur avec l'option--skip-grant-tableset éditer les fichiers ``/etc/hosts'' ou ``\windows\hosts'' pour ajouter une ligne pour votre hôte. 
Si vous avez fait la mise à jour depuis une version antérieure à 3.22.11 vers une version 3.22.11 ou plus récente, avez vous exécuté le script mysql_fix_privilege_tables? Si non, faites le. La structure des tables de droits a évolé avec la version 3.22.11 lorsque la commandeGRANTa été ajoutée.Si vous avez modifié directement la table de droit (avec les commandes INSERTouUPDATE) et que vos modifications n'ont pas été prise en compte, n'oubliez pas qu'il faut exécuter une commandeFLUSH PRIVILEGESoumysqladmin flush-privilegespour forcer le serveur à recharger les nouvelles valeurs. Sinon, vos modifications n'auront pas d'effet jusqu'au prochain redémarrage du serveur. N'oubliez pas qu'après avoir modifié votre mot de passeroot, vous n'avez pas à le re entrer jusqu'à ce que vous exécutiez la commandeFLUSH PRIVILEGEScar le serveur n'a pas encore noté que vous l'aviez modifié !Si les droits semblent changer durant une session, c'est peut être qu'un super utilisateur les a changé. Recharger les droits affecte non seulement les nouvelles connexions, mais aussi les connexions en cours, comme précisé dans section  6.9  Prise en compte des modifications de droits.
A fin de tests, démarrez le serveur mysqldavec l'option--skip-grant-tables. Ensuite, vous pouvez changer les tables de droits MySQL et utiliser le scriptmysqlaccesspour vérifier si les modifications ont bien l'effet désiré. Lorsque vous avez fini, lancez la commandeflush-privilegespour forcer l'utilisation des nouvelles tables de droits. Note: Recharger les tables annule l'option--skip-grant-tables. Cela vous permet de dire au serveur quand commencer à utiliser les droits, sans le redémarrer.Si vous avez des problèmes d'accès avec un programme Perl, Python ou ODBC, essayez de vous connecter au serveur avec mysql -u user_name nom_base_de_donneesoumysql -u user_name -pyour_pass nom_base_de_donnees. Si vous etes capable de vous connecter avec le clientmysql, c'est qu'il y a un problème avec votre programme, et non pas dans les droits d'accès.. (Notez aussi qu'il n'y a pas d'espace entre l'option-pet le mot de passe. Alternativement, vous pouvez utiliser--password=your_passpour spécifier votre mot de passe.)Si vous êtes bloqué par votre mot de passe, pensez à utiliser la fonction PASSWORD()pour changer de mot de passe avec les commandesINSERT,UPDATEouSET PASSWORD. Cette fonction n'est pas nécessaire avec la commandeGRANT ... INDENTIFIED BYou avec la syntaxemysqladmin password. Reportez vous à la sectionPasswordslocalhostest un synonyme qui désigne votre machine locale, ou l'hôte de connexion par défaut. Cependant, les connexions àlocalhostne sont pas valables si vous utilisez MIT-pthreads (Les connexionslocalhostutilisent les sockets Unix, qui ne sont pas supportées par MIT-pthreads). Pour contourner le problème sur ces systèmes, il préférable d'utiliser l'option--hostpour spécifier explicitement le nom de l'hôte. Cela va forcer le type de la connexion à TCP/IP. Dans ce cas, vous devez utiliser le vrai nom d'hôte de votre machine, et l'inscrire dans la tableuser (Cela reste vrai même si vous exécutez un programme client sur la même machine que le serveur).Si vous avez l'erreur Access deniedlors d'une connexion au serveur avec l'option-u user_name nom_base_de_donnees, vous pouvez avoir un problème avec la talbeuser. Vérifiez ceci en exécutant la commandemysql -u root mysqlpuis la commande sui vante : 
mysql> SELECT * FROM user;
 
Le résultat devrait contenir une ligne dont les colonnes HostetUsercorrespondent au nom d'hôte de votre ordinateur et au nom d'utilisateur MySQL. 
Le message Access deniedapparaîtra si vous essayez de vous connecter, le message d'erreur affichera l'adresse de l'hôte de connexion, le nom d'utilisateur et si vous utilisez un mot de passe. Normalement, il ne devrait y avoir qu'une ligne de lauserqui corresponde exactement au nom d'hôte de votre ordinateur et au nom d'utilisateurSi vous obtenez l'erreur ci dessous lors de la connexion au serveur depuis une autre machine que celle qui heberge le serveur MySQL, c'est qu'il manque une ligne dans la table userpour décrire votre machine hôte : 
Host ... is not allowed to connect to this MySQL server
 
Vous pouvez régler ce problème en utilisant l'utilitaire mysql(sur la machine server ! !) pour ajouter une ligne dans la tableuserpour le nom d'hôte de votre ordinateur et le nom d'utilisateur. Si vous ne fonctionnez pas sous MySQL 3.22 et que vous ne savez pas quelle adresse IP ou quel nom d'hôte est celui de votre machine, il vaut mieux ajouter une ligne avec'%'dans la colonneHostet redémarrer le serveur avec l'option--logoption. Après avoir tenté de vous connecter depuis la machine client, l'historique vous indiquera qui s'est réellement connecté. Vous pouvez alors remplacer la ligne avec'%'de la tableuserpar une ligne plus spécifique. Sinon, cela peut créer un trou de sécurité. 
Si le test avec mysql -u root testfonctionne mais quemysql -h your_hostname -u root testretourne une erreurAccess denied, alors c'est que vous n'avez pas entrer le nom de votre hôte dans la tableuser. Un problème récurent est que la colonneHostde la table user contient un nom d'hôte général, mais la résolution de nom retourne un nom de domaine complet, et vice-versa. Par exemple, si vous avec une ligne qui contient'tcx'dans la tableuser, mais que votre DNS dit à MySQL que votre nom d'hôte est'tcx.subnet.se', la ligne ne correspondra pas. Essayez d'ajouter une ligne dans la tableuserqui contienne l'adresse IP numérique de votre hôte, dans la colonneHost. (Alternativement vous pouvez aussi ajouter une ligne dans la tableuseravec une valeur dans la colonneHostqui contienne un caractère joker (par exemple,'tcx.%'). Cependant, c'est une pratique non sécurisée, qui peut provoquer des problèmes de sécurité.Si mysql -u user_name testfonctionne maismysql -u user_name other_nom_base_de_donneesne fonctionne pas, c'est que vous n'avez pas d'entrée pour la colonneother_nom_base_de_donneesde la tabledb.Si mysql -u user_name nom_base_de_donneesfonctionne lorsqui'il est exécuté sur la machine server, mais quemysql -u host_name -u user_name nom_base_de_donneesne fonctionne pas lorsqu'il est utilisé sur une machine client, c'est que la machine client n'est pas listée dans la tableuserou la tabledb.Si vous n'arrivez pas à vous defaire de l'erreur Access denied, effacez toutes les lignes de la tableuserqui possède un joker (``%'' ou ``_')'dans la colonneHost. Une erreur récurrente est d'insérer une ligne du typeHost='%'etUser='quidam', en pensant que cela va vous permettre de vous connecter depuis la machinelocalhost. La raison qui fait que ceci ne fonctionne pas est que les droits par défaut contiennent une ligne qui estHost='localhost'etUser=''. Or, la ligne qui aHost='localhost'est plus spécifique que'%', et donc, sera utilisée de préférence à celle utilisée lors de la connexion de depuislocalhost! La procedure correcte est d'insérer un deuxième ligne avecHost='localhost'etUser='some_user', ou d'effacer les lignes avecHost='localhost'etUser=''.Si vous avez l'erreur suivante, c'est que vous avez un problème avec la table dbouhost: 
Access to database denied
 
Si l'entrée sélectionnée dans la table dba une colonneHostvide, assurezvous qu'il y a au moins une entrée correspondante dans la tablehostqyu spécifie à quel hôte s'applique ces droits. Si vous avez une erreur en utilisant la commandeSELECT ... INTO OUTFILEorLOAD DATA INFILE, c'est que vous n'avez peut être pas les droits file. 
Rappelez vous que les programmes clients utilisent des paramètres par défaut qui sont stockés dans des fichiers de configuration ou des variables d'environnement. Si un client semble ne pas envoyer les bons paramètres lorsque vous ne les spécifiez pas, allez vérifier les informations stockées dans le fichier ``.my.cnf'' de votre dossier racine, ou les variables d'environnment. Vous pouvez aussi vérifier les paramètres dans les fichiers de configuration de MySQL, mais il est très improbable que des paramètres de connexion soient enregistrés là.
  4.15.4  Fichier d'options.
Si tout ce qui précède a échoué, lancez le démon mysqldavec les options de debugging (par exemple,--debug=d,general,query). Cette option affichera les hôtes et nom d'utilisateur des connexions, ainsi que des informations concernant les commandes exécutées. Reportez vous à la section   G.1  Debugguer un serveur MySQL.Si vous avez vraiment tout tenté, et que vous pensez qu'il vous faut le rapporter à la liste de diffusion (en anglais), n'oubliez jamais de fournir un dump des tables de droits de MySQL. Vous pouvez créer ce dump avec l'utilitaire mysqldump mysql. Comme toujours, pensez à poster votre problème avec l'utilitairemysqlbug. Dans certains cas, vous devrez redémarrermysqldavec l'option--skip-grant-tablespour pouvoir faire le dump. |