2016-11-17 1 views
1

Ich möchte mysql Client ausführen, geben Sie das Passwort nicht interaktiv.Warum kann ich ein Passwort nicht interaktiv an MySQL übergeben?

Die Standardlösung ist dieses

mysql -u root -e "foo" -p < password_file 

aber meine Situation ist dies

produce_password | mysql -u root -p 

Hier mysql fordert zur Eingabe eines Passworts, obwohl Daten in verrohrt wird. (Ja, produce_password aussendet Daten; echo foo | mysql verhält sich auf die gleiche Weise.)

Das Internet scheint zu denken, dass das oben genannte funktionieren sollte, aber die Tatsache ist es nicht. Die Abhilfe würde

produce_password > password_file 
mysql -u root -p < password_file 
rm password_file 

sein Aber lassen Sie uns sagen, ich will nicht diese (zB Politik verlangt, dass dieses Passwort nie auf die Platte geschrieben werden) tun

Wie kann ich mysql das Passwort von der nehmen machen Eingabeprozess ohne Aufforderung, wie es für eine Datei wäre?

+0

Verwandte: [? Was mit einem MySQL-Passwort auf der Kommandozeile eine sichere Alternative ist] (http://serverfault.com/questions/476228/whats-a-secure-alternative-to-using-a -mysql-Passwort-auf-der-Kommandozeile) – Dezza

Antwort

1

Mit Dank an fancyPants zur Erklärung der Ursache, hier ist eine Lösung, die meine Anforderungen erfüllt. (Die verschlüsselte .mylogin.cnf mit mysql_config_editor ist nicht richtig für mich, aber danke.)

Um die Sicherheitsrichtlinie zu erfüllen, Mount /ramfs als temporäre Dateisystem ramfs. Angenommen Dateirechte sind angemessen restriktiv.

ramdir="/ramfs" 
cnf="$(mktemp "$ramdir/this-script-name-XXXXX")" 
pw="$(produce_password)" 

cat >"$cnf" <<EOF 
[client] 
user=root 
password="$pw" 
EOF 

mysql --defaults-extra-file="$cnf" -e 'select 1' 

rm "$cnf" 
1

Ich weiß nicht, wie ich das erklären soll, aber wenn Sie etwas pipen, wird das stdout des ersten Programms an die stdin des zweiten Programms weitergeleitet. Sie verwechseln das irgendwie mit der Befehlszeile oder was auch immer. Sie können natürlich etwas zu mysql pipen, aber was immer Sie pipen, wird nach behandelt Sie haben sich authentifiziert.

würde die Lösung

mysql -u root -p$(produce_password) 

Dies erzeugt Ihr Passwort sein mit dem, was Programm haben Sie da und legt es an der richtigen Stelle auf der Kommandozeile (mein Englisch schlecht ist, kann besser nicht erklären). Wenn Sie es in einer Datei haben könnten Sie

mysql -u root -p$(cat file) 

zu tun, weiß ich nicht, warum Sie es auf diese Weise trotzdem tun wollen, aber Sie könnten in mit einer verschlüsselten Datei mit Ihren Anmeldeinformationen interessiert sein, dass können Sie verwenden, um sich anzumelden, ohne ein Passwort anzugeben. Lesen Sie mehr darüber here.

Verwandte Themen