it-swarm.com.de

Wie kann ich den MySQL-Client dazu bringen, ein Passwort aus mylogin.cnf zu lesen?

Ich versuche, den MySQL-Client mit einem MySQL-Server zu verbinden, ohne dass das Kennwort interaktiv angegeben werden muss. Schritte gemacht:

1) Erstellen Sie zuerst eine mylogin.cnf-Datei

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

2) Datei erfolgreich erstellt:

$ 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) Stellen Sie eine Verbindung mit dem MySQL-Client her

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

Gibt es irgendwo einen Standardwert/eine Standardkonfiguration, durch die der Client das Kennwort in mylogin.cnf ignoriert? Die Benutzer- und Host-Eigenschaften wurden korrekt aus der Datei gelesen.

Ich kann eine gute Verbindung herstellen, wenn ich das Passwort in der Befehlszeile eingebe:

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

Die MySQL-Client-Version ist 5.6.22, die MySQL-Server-Version ist 5.6.22, beide unter Oracle Linux 6. Client und Server befinden sich auf verschiedenen Hosts.

Vielen Dank

11

Wie auch immer Sie dies tun, Sie werden wahrscheinlich irgendwo ein Passwort gespeichert haben. Selbst der MySQL 5.6-Anmeldepfad kann von jedem mit Motivation leicht entschlüsselt werden. Diese Warnung sagte, dies wäre eine einfache Lösung.

Legen Sie in Ihrem Umgebungsskript (z. B. ~/.profile Oder ~/.bashrc) Fest

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

(Geben Sie natürlich Ihren gewünschten Benutzer, Passwd und Hostnamen ein.)

Nach dem erneuten Anmelden von Shell sollten Sie dies einfach tun können

mysql

... die Ihren Alias ​​verwenden und eine Verbindung zur Datenbank herstellen und alle Kennwörter in .my.cnf - Dateien ignorieren.

Sicherheitshinweis : Wenn sich andere Benutzer auf Ihrem Server befinden, möchten Sie möglicherweise Ihr Profilskript ändern, damit andere nicht so leicht auf das Kennwort zugreifen können. Jeder Administrator mit Root oder Sudo kann es weiterhin sehen. Daran führt kein Weg vorbei.

2
Joshua Huber

verwenden Sie den folgenden Befehl, um zuerst den Anmeldepfad festzulegen

mysql_config_editor set --login-path = lgpath --user = root -p
Passwort

verwenden Sie dann den folgenden Befehl, um sich bei MySQL anzumelden

mysql --login-path = lgpath

Hilfe zu den Optionen für den MySQL-Anmeldepfad finden Sie unter

mysql_config_editor set --help

10
Nawaz Sohail

Ich hatte das gleiche Problem wie OP, aber die Antworten in diesem Thread haben mich verwirrt. Vinay Mandalas Link hat tatsächlich für mich funktioniert. Aus Gründen der Klarheit hier erneut veröffentlicht.

Mein Problem:

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

Es beweist, dass mysql_config_editor behandelt Sonderzeichen im Passwort nicht richtig.

Lösung:

Wann mysql_config_editor fordert Sie zur Eingabe des Passworts auf, stellen Sie sicher, dass Sie das Passwort in doppelte Anführungszeichen (") umgeben. Anschließend können Sie sich problemlos anmelden.

3
quexy

Ich habe diesen Fehler erhalten, außer es stand (mit Passwort: JA)

Der von Giovanni erwähnte Grund war ein "#" im Passwort. Ich habe festgestellt, dass eine Problemumgehung darin besteht, Anführungszeichen um Ihr Kennwort einzufügen, wenn Sie dazu aufgefordert werden. Die gleiche Einschränkung besteht bei Klartextkennwörtern, die .my.cnf verwenden.

1
gamorten

Die Nawaz-Antwort ist richtig. Ich habe wenig hinzuzufügen. Ich schlage vor, dass Sie mit der Umgebungsvariablen MYSQL_TEST_LOGIN_FILE einige Versuche unternehmen, eine neue Konfigurationsdatei zu erstellen, nur für den Fall, dass die Standarddatei beschädigt ist. Verwenden Sie auch --no-defaults, Um .cnf - Dateien zu überspringen. Wenn das Passwort das Zeichen # Enthält, funktioniert mysql login-path Nicht.

$ 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

Ich stoße auf ein ähnliches Problem wie das Originalplakat. Ich vermute, es hat mit Zeichen im Passwort zu tun, die nicht richtig verschlüsselt/entschlüsselt werden.

Um dies zu bestätigen, ändern Sie das Passwort in etwas Einfaches und prüfen Sie, ob dieses Problem behoben ist.

0
Plazgoth

NOTE wenn Sie versuchen, path unter dem Linux-Benutzerroot - You auszuführen kann nicht einfach Sudo verwenden. Sie müssen sich als root IE anmelden

[email protected]:$ Sudo su
[email protected]:$ Enter Password
[email protected]:$ mysql_config_editor set --login-path=data-main --user=<user> --password --Host=<Host>
[email protected]:$ Enter Password
[email protected]:$ exit
[email protected]:$ ...

Auch wie in anderen Beiträgen hier erwähnt. Sie müssen doppelte Anführungszeichen um Ihr mysql Passwort verwenden, wenn es etwas anderes als alphanumerische Zeichen enthält.

0
Zak

Ich hatte dieses Problem mit einem Shell-Skript. Mein Skript hat den $ HOME-Wert geändert und dies hat dazu geführt, dass der --login-path = *** scheinbar ignoriert wird. Als ich aufhörte, den Wert von $ HOME zu ändern, fing es an zu funktionieren.

0
dbCarl