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


10

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

Antworten:


1

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. ~/.profileoder ~/.bashrc) fest

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

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

Nach dem erneuten Anmelden der 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.cnfDateien ignorieren .

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


Dies ist eine Umgehung des eigentlichen Problems, aber mir geht es gut. Ich akzeptiere diese Antwort mit dem Haftungsausschluss für zukünftige Leser, dass der richtige Weg, dies zu tun, die Nawaz-Antwort ist, aber das funktioniert in meiner Umgebung aus einem unbekannten Grund nicht. Vielen Dank!
Lefteris Koutsoloukas

-1 Dies beantwortet weder die Abfrage des OP noch vermeidet es, ein Passwort in einer Datei zu speichern. Das Passwort wird jetzt in .profile anstelle von .mylogin.cnf gespeichert. Jetzt wird das Passwort vom Befehl ps angezeigt.
Wunder173

@miracle, bitte bestätigen Sie Ihre Behauptung, dass ps das Passwort preisgibt. Auf meinen Systemen wird das Kennwort in der ps-Ausgabe als xxxxxxx maskiert angezeigt. Wenn sich Ihr MySQL-Client nicht wie meiner verhält, geben Sie bitte an, welche MySQL-Version und -Distribution Sie ausführen. Und haben Sie eine bessere Antwort auf die eigentliche Frage des OP?
Joshua Huber

2
@joshua: Endbenutzerrichtlinien für die Kennwortsicherheit : "Verwenden Sie eine -pyour_passoder --password=your_pass-Option in der Befehlszeile (...). Dies ist praktisch, aber unsicher ."
Wunder173

9

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


Ich habe versucht, einen Anmeldepfad explizit festzulegen, wie Sie vorgeschlagen haben, aber leider hat er das gleiche Verhalten: $ mysql_config_editor print --all [lgpath] user = <Benutzer> password = ***** host = <host> $ mysql --login -path = lgpath FEHLER 1045 (28000): Zugriff für Benutzer '<Benutzer>' @ '<Host>' verweigert (unter Verwendung des Passworts: NEIN)
Lefteris Koutsoloukas

3

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 zeigt, dass mysql_config_editorSonderzeichen im Passwort nicht richtig behandelt werden.

Lösung:

Wenn mysql_config_editorSie zur Eingabe des Kennworts aufgefordert werden, stellen Sie sicher, dass Sie das Kennwort in doppelte Anführungszeichen (") setzen . Anschließend können Sie sich problemlos anmelden.


1

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.


0

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 --no-defaultsdiese Option auch , um .cnfDateien zu überspringen . Wenn das Passwort das Zeichen enthält #, mysql login-pathfunktioniert es 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

Diese Umgebungsvariable wurde nicht festgelegt. Ich habe es eingestellt, aber ich habe genau das gleiche Verhalten. Das Passwort in mylogin.cnf wurde ignoriert.
Lefteris Koutsoloukas

Sind Sie sicher, dass der Benutzer der mysqlBefehl exec ist mysql? Wenn nicht, ändern Sie den Besitzer von mylogin.cnfund es sollte funktionieren :)
Iazel

0

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.


Ich hatte das gleiche Problem. Wie Plazgoth betonte, hatte ich ein Sonderzeichen im Passwort und es funktionierte nicht. Was für mich funktioniert hat, ist der Vorschlag des Benutzers bglad zu diesem Beitrag
Vinay Mandala

0

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

HINWEIS Wenn Sie versuchen, das pathunter Linux auszuführen, root können Sie es nicht einfach verwenden sudo. Sie müssen sich als Root- IE anmelden

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:$ ...

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.