FAQ MySQLConsultez toutes les FAQ
Nombre d'auteurs : 15, nombre de questions : 155, dernière mise à jour : 22 avril 2014 Ajouter une question
Cette FAQ a été conçue à partir des questions fréquemment posées sur le forum MySQL de Developpez.com. Elle ne prétend pas à être exhaustive et peut contenir des erreurs occasionnelles. Si vous relevez une coquille, n'hésitez pas à nous le faire savoir.
Pour participer à cette FAQ, veuillez envoyer vos réponses sur le forum.
- Pourquoi MySQL refuse la connexion alors que mon nom d'utilisateur et mon mot de passe sont bons ?
- Faut-il créer un compte pour chaque hôte possible d'un utilisateur ?
- Comment modifier l'hôte attaché à un nom d'utilisateur ?
- Comment voir les comptes utilisateurs ?
- Comment indiquer mon hôte lors de la connexion ?
- Si plusieurs comptes ont le même username, comment MySQL choisit-il ?
- Comment savoir sous quel compte vous êtes connecté ?
Pour MySQL, un utilisateur n'est pas défini par son seul nom (username), mais par la combinaison entre ce nom et l'ordinateur depuis lequel l'utilisateur tente de se connecter. Autrement dit, le compte toto que vous utilisez sur le serveur n'est pas forcément le même que le compte toto utilisé depuis un client, qui peut avoir un autre mot de passe, d'autres privilèges, ou encore ne pas exister.
Cette spécificité de MySQL, qui permet de distinguer facilement des comptes locaux et distant (ou encore LAN et WAN), est très adaptée aux applications web. Par contre, elle peut surprendre l'utilisateur non averti, qui ne comprend pas que ses privilèges changent selon l'ordinateur d'où il est connecté.
Les questions-réponses suivantes vous permettront de mieux comprendre et utiliser ce système.
Bien sûr que non. Vous pouvez spécifier l'hôte de chaque utilisateur de différentes manières, avec le degré de souplesse voulu :
- un nom d'ordinateur, ou bien localhost pour le serveur (par exemple PC12345 ou 'PC12345')
- un nom d'ordinateur utilisant des jokers % ou _ (par exemple, 'PC123%')
- une adresse IP (par exemple 192.168.22.40 ou '192.168.22.40')
- une adresse IP incluante des jokers % ou _ (par exemple '192.168.%')
- une adresse IP suivie d'un masque de réseau (par exemple '192.168.0.0/255.255.0.0')
Si vous ne connaissez pas le système des masques, notez simplement que les deux derniers exemples sont synonymes. Pour plus de précisions, cf http://dev.mysql.com/doc/refman/5.0/...on-access.html.
Il suffit de renommer le compte. Si par exemple vous voulez que le compte toto@'192.168.%' puisse être utilisé depuis n'importe quel ordinateur, vous pouvez le modifier ainsi :
Code sql : | Sélectionner tout |
RENAME USER toto@'192.168.%' TO toto@'%' ;
La requête suivante donne la liste des comptes utilisateurs, sous forme de combinaison username/host :
Code sql : | Sélectionner tout |
1 2 | SELECT user, host FROM mysql.user; |
Vous ne pouvez pas choisir ou indiquer votre hôte. C'est MySQL qui le déterminera automatiquement, d'après le paramétrage réseau (voir cette question).
MySQL choisit le compte dont l'hôte est défini de la façon la plus spécifique. Par exemple, si vous avez trois comptes toto@localhost, toto@'192.168.%' et toto@'%', et que vous vous connectez en local depuis le serveur lui-même, votre hôte répond aux trois définitions (localhost, 192.168.% et % tout court). Comme localhost est la définition la plus spécifique (pas de joker), MySQL vous considèrera comme toto@localhost, avec le mot de passe et les privilèges prévus pour ce compte.
De la même manière, une adresse IP avec un joker est plus spécifique qu'un joker seul. Quand vous vous connecterez sur un autre poste du réseau local, vous serez donc toto@'192.168.%' plutôt que toto@'%'. Ce dernier compte ne sera utilisé que lorsque vous vous connecterez de l'extérieur.
Si vous souhaitez avoir les mêmes privilèges et le même mot de passe partout, il suffit de supprimer les comptes toto@localhost et toto@'192.168.%'. Vous serez alors toto@'%' quel que soit le poste d'où vous vous connectez.
La spécificité de l'hôte est prioritaire sur celle du nom d'utilisateur, ce qui peut causer un comportement inattendu quand il existe un compte anonyme sur un hôte spécifique. Voir la QR sur les comptes anonymes.
La fonction CURRENT_USER() vous donne le compte que vous utilisez, sous la forme username@host.
Ne confondez pas CURRENT_USER() avec USER(). Cette dernière fonction vous donne votre nom d'utilisateur et votre hôte réels (sans joker). Si par exemple vous vous connectez depuis MON_PC avec le compte toto@'192.168.%', CURRENT_USER() vous donnera toto@192.168.%, tandis que USER() vous donnera toto@MON_PC.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.