Tester les informations d'identification MySQL à partir de la ligne de commande Linux?

17

Comment testez-vous les informations d'identification MySQL à partir de la ligne de commande sur un serveur Linux?

Jake Wilson
la source

Réponses:

5

@ Réponse de Phil et @ Réponse de Mr.Brownstone devrait suffire à votre question, donc +1 pour les deux d'entre eux.

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();
  • USER () indique comment vous avez tenté de vous authentifier dans MySQL
  • CURRENT_USER () indique comment vous avez été autorisé à vous authentifier dans MySQL

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 vous voyez 'myuser'@'localhost', alors vous pouvez vous authentifier à partir du serveur DB.

Si vous voyez 'myuser'@'127.0.0.1'et ne voyez pas 'myuser'@'localhost', vous pouvez à nouveau vous authentifier à partir du serveur DB, mais vous devez spécifier le à --protocol=tcppartir de la ligne de commande.

Si vous voyez 'myuser'@'%', vous pouvez alors vous connecter à distance à partir de n'importe quel serveur.

Si vous voyez 'myuse'r@'10.20.30,%', alors vous pouvez uniquement effectuer des connexions à distance à 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 myuserest 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 ne l'êtes pas rootet que vous souhaitez tester myuser 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.

RolandoMySQLDBA
la source
13
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à la fin pour quitter automatiquement les arguments non valides. Vous pouvez également rediriger stderr vers /dev/nullsi vous n'aimez pas le message d'erreur MySQL généré automatiquement.

CSTobey
la source
6

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 l' hôte et l' utilisateur par les valeurs correctes, puis vous devriez être invité à entrer votre mot de passe.

Mr.Brownstone
la source
2
Je veux vérifier par programme. Comme quelque chose qui retourne vrai ou faux.
Jake Wilson
2
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?

Philᵀᴹ
la source