web-dev-qa-db-fra.com

Comment faire pour que le client MySQL lise le mot de passe depuis mylogin.cnf?

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)

Existe-t-il une valeur/configuration par défaut 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

11

Dans tous les cas, vous aurez probablement un mot de passe enregistré quelque part. Même le chemin de connexion 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 ~/.profile ou ~/.bashrc), ensemble

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 de 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 .my.cnf des dossiers.

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

2
Joshua Huber

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

10
Nawaz Sohail

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_editor ne gère pas correctement les caractères spéciaux du mot de passe.

Solution:

Quand mysql_config_editor vous invite à saisir le mot de passe, assurez-vous de l'entourer de guillemets doubles ("). Ensuite, vous pouvez vous connecter très bien.

3
quexy

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.

1
gamorten

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-defaults passer .cnf des dossiers. Si le mot de passe contient le caractère #, mysql login-path ne 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
0
Giovanni

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.

0
Plazgoth

NOTE si vous essayez d'exécuter le path sous tilisateur linuxroot - Vous ne peut pas simplement utiliser Sudo. Vous devez vous connecter en tant que root IE

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 mot de passe mysql s'il contient autre chose que des caractères alphanumériques.

0
Zak

J'ai eu ce problème avec un script Shell. Mon script modifiait la valeur $ 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
dbCarl