Ich habe MySQL - Passwort auf einer Datei gespeichert foo.php
, zum Beispiel P455w0rd
, wenn ich versuche , es zu benutzen:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Bei beiden Optionen wird immer noch nach dem Passwort gefragt. Wie kann das Passwort korrekt gesendet werden stdin
?
-p
und Ihrem Passwort nicht leer sein ./proc
sie trivial lesen kann, solange das Programm ausgeführt wird . Das ist, was~/.my.cnf
ist für, richtig auf 0600Antworten:
Sie müssen sehr vorsichtig sein, wie Sie Passwörter an Befehlszeilen übergeben, da Sie, wenn Sie nicht vorsichtig sind, diese mit Tools wie z
ps
.Am sichersten ist es, eine neue Konfigurationsdatei zu erstellen und diese
mysql
mit der Befehlszeilenoption--defaults-file=
oder an diese zu übergeben--defaults-extra-file=
.Der Unterschied zwischen den beiden besteht darin, dass die letztere zusätzlich zu den Standardkonfigurationsdateien gelesen wird, wohingegen bei der ersteren nur die als Argument übergebene Datei verwendet wird.
Ihre zusätzliche Konfigurationsdatei sollte Folgendes enthalten:
Stellen Sie sicher, dass Sie diese Datei sichern.
Dann renne:
quelle
argv
es, um die dem-p
Flag zugewiesenen Parameter zu überschreiben . Zumindest ist dies hier zusammen mit anderen relevanten Informationen der Fall--login-path
dass es jetzt unterstützt wird. Es ist nicht viel besser als das, aber es ist etwas weniger Klartext (obwohl die Barriere für die Konvertierung des Inhalts in Klartext gering ist).export MYSQL_PWD=muhpassword
) und führen Sie Ihren Befehl ohne das aus-p
. Siehe MySQL-Programmumgebungsvariablen . Trotz der grässlichen Warnungen des Handbuchs ist dies ziemlich sicher . Es sei denn, Sie starten später seltsame Warez in der gleichen Shell. Also laufen wir:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
Das
mysql
Client-Dienstprogramm kann in der Befehlszeile ein Kennwort mit den Optionen-p
oder eingeben--password=
.Wenn Sie verwenden
-p
, darf nach dem Optionsbuchstaben kein Leerzeichen stehen:Ich bevorzuge die langen Optionen in Skripten, da sie sich selbst dokumentieren:
quelle
/proc/$pid/cmdline
oder über denps
Befehl. Es ist wahr, dass mysql das Passwort beim Start in argv überschreibt, aber es gibt immer ein Zeitfenster, in dem ein anderer Benutzer das Passwort beobachten kann. Auf einigen Systemen funktioniert das argv-Überschreiben möglicherweise nicht.Wenn Sie
mysql
mit einem Passwort beginnen möchten, müssen Sie das Passwort zuerst in einer Variablen abrufen:Dann können Sie Ihren
mysql
Befehl starten mit:quelle
MYSQL_PWD
Umgebungsvariable gibt, von der gelesen wirdmysql
wenn Sie nichts angeben-p
. Und unter Linux ist dies eine sichere Methode, da die Umgebung eines Benutzers - im Gegensatz zum Argument vector - nicht von anderen, nicht qualifizierten Benutzern gelesen werden kann.