Comment testez-vous les informations d'identification MySQL à partir de la ligne de commande sur un serveur Linux?
@ Réponse de Phil et @ Réponse de Mr.Brownstone devrait suffire pour votre question, donc +1 pour les deux.
Pour les éléments suivants, supposons que vous vous connectez avec le nom d'utilisateur myuser
Une fois connecté à mysql, vous devez exécuter la requête suivante:
SELECT USER(),CURRENT_USER();
Parfois, ils sont différents. Cela peut vous expliquer pourquoi vous êtes autorisé à vous connecter à mysql.
Voici une autre requête que vous devez exécuter:
SELECT CONCAT('''',user,'''@''',Host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';
Cela vous montrera les façons dont vous êtes autorisé à vous connecter en tant que myuser
.
Si tu vois 'myuser'@'localhost'
, vous pouvez alors vous authentifier à partir du serveur DB.
Si tu vois 'myuser'@'127.0.0.1'
et ne voient pas 'myuser'@'localhost'
, vous pouvez à nouveau vous authentifier à partir du serveur DB, mais vous devez spécifier le --protocol=tcp
depuis la ligne de commande.
Si tu vois 'myuser'@'%'
, vous pouvez alors vous connecter à distance à partir de n'importe quel serveur.
Si tu vois 'myuse'r@'10.20.30,%'
, vous pouvez alors effectuer des connexions à distance uniquement à partir de 10.20.30.% netblock.
Une fois que vous voyez ce que 'mysql.user' a pour votre utilisateur, vous pouvez autoriser ou restreindre myuser de logggin d'une manière et non de l'autre.
Si vous souhaitez simplement vérifier si le mot de passe de myuser
est whateverpassword
, vous pouvez procéder comme suit:
SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');
Vous pouvez vérifier à partir de la ligne de commande comme suit:
PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`
Si vous n'êtes pas root
et que vous souhaitez tester mon utilisateur uniquement, vous pouvez le faire:
PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`
Si vous obtenez 1, le mot de passe de myuser est vérifié comme bon.
mysql -h Host -u user -p<whatever> -e"quit"
Cela vous permet d'utiliser la même chaîne de connexion que vous utilisez pour envoyer par programme des requêtes au serveur. Vous pouvez ajouter || exit 1
jusqu'à la fin pour quitter automatiquement les arguments non valides. Vous pouvez également rediriger stderr vers /dev/null
si vous n'aimez pas le message d'erreur MySQL généré automatiquement.
Vous pouvez utiliser la commande suivante (en supposant que vous avez configuré mysql dans votre PATH):
mysql -h Hôte -u utilisateur -p
Remplacez simplement Host et ser par les valeurs correctes, puis vous devriez être invité à entrer votre mot de passe.
mysql --user=user_name --password=your_password dbname
Votre question est-elle aussi simple ou existe-t-il un cas spécifique que vous devez tester?