Comment puis-je faire en sorte que le client MySQL lise le mot de passe depuis mylogin.cnf?


11

J'essaie de faire en sorte que le client mysql se connecte à un serveur mysql sans exiger que le mot de passe soit donné de manière interactive. Mesures prises:

1) Créez d'abord un fichier mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) Fichier créé avec succès:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Connectez-vous en utilisant le client mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Y a-t-il une valeur / configuration par défaut quelque part qui oblige le client à ignorer le mot de passe dans mylogin.cnf? Les propriétés utilisateur et hôte ont été lues correctement dans le fichier.

Je peux me connecter très bien si je fournis le mot de passe sur la ligne de commande:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

La version du client MySQL est 5.6.22, la version du serveur MySQL est 5.6.22, à la fois sur Oracle Linux 6. Le client et le serveur sont sur des hôtes différents.

Merci

Réponses:


2

Dans tous les cas, vous aurez probablement un mot de passe enregistré quelque part. Même le chemin de connexion de MySQL 5.6 est facilement déchiffrable par toute personne motivée. Cet avertissement a dit que ce serait une solution facile.

Dans votre script d'environnement (par exemple ~/.profileou ~/.bashrc), définissez

alias mysql='mysql -uUser -pPasswd -hHostname'

(en insérant bien sûr votre utilisateur, mot de passe et nom d'hôte.)

Après la reconnexion du shell, vous devriez pouvoir simplement faire

mysql

... qui utilisera votre alias et se connectera à la base de données et ignorera tous les mots de passe dans les .my.cnffichiers.

Remarque de sécurité: s'il y a d'autres utilisateurs sur votre serveur, vous souhaiterez peut-être chmod 700 votre script de profil afin que le mot de passe ne soit pas aussi facilement accessible par d'autres. Tout administrateur avec root ou sudo pourra toujours le voir; aucun moyen de contourner cela.


Il s'agit d'une solution de contournement au problème réel, mais je vais bien. J'accepte cette réponse avec l'avertissement aux futurs lecteurs que la bonne façon de le faire est la réponse Nawaz, mais cela ne fonctionne pas sur mon environnement pour une raison inconnue. Merci!
Lefteris Koutsoloukas

1
-1 cela ne répond ni à la requête de l'OP ni n'évite de stocker un mot de passe dans un fichier. le mot de passe est maintenant stocké dans .profile au lieu de .mylogin.cnf. Mais maintenant, le mot de passe est affiché par la commande ps.
miracle173

@miracle, veuillez valider votre affirmation selon laquelle ps révélera le mot de passe. Sur mes systèmes, le mot de passe s'affiche masqué comme xxxxxxx dans la sortie ps. Si votre client MySQL ne fonctionne pas comme le mien, veuillez poster la version et la distribution mysql que vous utilisez. Et avez-vous une meilleure réponse à la vraie question du PO?
Joshua Huber

2
@joshua: Consignes aux utilisateurs finaux pour la sécurité des mots de passe : "Utilisez une option -pyour_passou --password=your_passsur la ligne de commande (...) C'est pratique mais pas sûr ."
miracle173

10

utilisez la commande suivante pour définir d'abord le chemin de connexion

mysql_config_editor set --login-path = lgpath --user = root -p
mot de passe

puis utilisez la commande ci-dessous pour vous connecter à mysql

mysql --login-path = lgpath

L'aide sur les options de chemin de connexion mysql peut être vue par

mysql_config_editor set --help


J'ai essayé de définir un chemin de connexion explicitement comme vous l'avez suggéré, mais malheureusement, il a le même comportement: $ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath ERREUR 1045 (28000): Accès refusé à l'utilisateur '<utilisateur>' @ '<hôte>' (en utilisant le mot de passe: NON)
Lefteris Koutsoloukas

3

J'ai eu le même problème que OP, mais les réponses dans ce fil m'ont confondu. Le lien de Vinay Mandala a réellement fonctionné pour moi. Republié ici pour plus de clarté.

Mon problème:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Cela prouve que mysql_config_editorne gère pas correctement les caractères spéciaux dans le mot de passe.

Solution:

Lorsque mysql_config_editorvous êtes invité à entrer le mot de passe, assurez-vous de l'entourer de guillemets (") . Ensuite, vous pouvez vous connecter très bien.


1

J'obtenais cette erreur, sauf qu'elle disait (en utilisant le mot de passe: OUI)

La raison mentionnée par Giovanni était due à un "#" dans le mot de passe. J'ai trouvé qu'une solution de contournement consiste à insérer des guillemets autour de votre mot de passe lorsque vous y êtes invité. La même restriction existe avec les mots de passe en texte brut utilisant .my.cnf.


0

La réponse Nawaz est correcte. J'ai peu à ajouter. Je vous suggère de faire quelques tentatives avec la variable d'environnement MYSQL_TEST_LOGIN_FILE pour créer un nouveau fichier de configuration, juste au cas où le fichier par défaut est corrompu. Utilisez également --no-defaultspour ignorer les .cnffichiers. Si le mot de passe contient le caractère #, mysql login-pathne fonctionne pas.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

Cette variable d'environnement n'a pas été définie. Je l'ai réglé mais j'ai exactement le même comportement. Il a ignoré le mot de passe dans mylogin.cnf.
Lefteris Koutsoloukas

Êtes-vous sûr que l'utilisateur qui exécute la mysqlcommande est mysql? Sinon, changez le propriétaire de mylogin.cnfet cela devrait fonctionner :)
Iazel

0

Je rencontre un problème similaire à celui de l'affiche originale. Je soupçonne que cela a à voir avec les caractères du mot de passe qui ne sont pas cryptés / décryptés correctement.

Pour confirmer, essayez de changer le mot de passe en quelque chose de simple et voyez si ce problème disparaît.


J'ai eu le même problème. Comme l'a souligné Plazgoth , j'avais un caractère spécial dans le mot de passe et cela ne fonctionnait pas. Ce qui a fonctionné pour moi, c'est la suggestion de l'utilisateur bglad sur ce post
Vinay Mandala

0

J'ai eu ce problème avec un script shell. Mon script modifiait la valeur de $ HOME et cela a fait que --login-path = *** semblait être ignoré. Lorsque j'ai arrêté de modifier la valeur $ HOME, cela a commencé à fonctionner.


0

REMARQUE si vous essayez d'exécuter le pathsous l' utilisateur linux root - Vous ne pouvez pas simplement utiliser sudo. Vous devez vous connecter en tant qu'IE racine

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

Aussi, comme mentionné dans d'autres articles ici .. Vous devez utiliser des guillemets doubles autour de votre mysqlmot de passe s'il contient autre chose que des caractères alphanumériques.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.