Ich erstelle ein Bash-Skript für einige Aufgaben. Eine dieser Aufgaben ist das Erstellen einer MySQL-Datenbank aus demselben Bash-Skript. Was ich gerade mache, ist das Erstellen von zwei Variablen: eine für den Benutzernamen des Geschäfts und die andere für das Passwort des Geschäfts. Dies ist der relevante Teil meines Skripts:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Aber immer eine Fehlermeldung erhalten, dass der Zugriff für Benutzer root ohne PASSWORT verweigert wurde. Was mache ich falsch? Ich muss das gleiche für PostgreSQL tun.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
quelle
quelle
echo "$MYSQL_PASS"
Sie es, bevor Sie es an diemysql
Leitung übergeben. Hat es das richtige Passwort?ps wwaux
.Antworten:
Sowohl für MySQL als auch für PostgreSQL können Sie Ihren Benutzer und Ihr Kennwort in der lokalen Konfigurationsdatei angeben. .my.cnf für MySQL und .pgpass für PostgreSQL. Diese Dateien sollten sich in Ihrem Home-Verzeichnis befinden (dh ~ / .my.cnf).
.my.cnf:
.pgpass:
Sie können hier einen Platzhalter eingeben, der ******* durch ein beliebiges Feld ersetzt.
PS: Geben Sie niemals ein Passwort in der Befehlszeile an! Dies kann mit ps perfekt sichtbar sein, wenn Ihr System nicht so konfiguriert ist, dass keine Prozesse angezeigt werden, die anderen Benutzern gehören.
@thinice: Wenn Sie diese Dateien wirklich sicher erstellen möchten, sollten Sie Folgendes tun:
Auf diese Weise würde die Datei von Anfang an mit sicheren Berechtigungen erstellt, und kein Lauscher hätte die Möglichkeit, Ihr Passwort zu verlieren.
PostgreSQL wird die Verwendung der Datei mit Berechtigungen über 0600 ohnehin ablehnen.
quelle
--defaults-extra-file=filename
. Dies kann nützlich sein, wenn Sie es an einem nicht standardmäßigen Ort platzieren oder einfach eine temporäre Datei erstellen möchten. Ist verdächtig, dass es eine ähnliche Option mit PostgreSQL ist, aber ich bin damit nicht vertraut.0600
Dies wird den Trick machen Danke
quelle
Wie führe ich eine Befehlszeile mit einem sicheren Passwort aus? benutze den Konfigurationseditor !!!
Ab MySQL 5.6.6 können Sie das Passwort in einer Konfigurationsdatei speichern und dann solche CLI-Befehle ausführen ....
--login-path ersetzt Variablen ... Host, Benutzer UND Passwort. ausgezeichnet richtig!
quelle
Stellen Sie sicher, wie Sie Ihren Pass schreiben und er entkommt nicht
--defaults-extra-file = ist eine gute Sache (tm) (c)
quelle
Setzen Sie keine Anführungszeichen um das Kennwort, da die Anführungszeichen in diesem Fall als Teil des Kennworts betrachtet werden.
quelle
Eine ähnliche Frage gibt es bei StackOverflow.
Um meine Antwort von dort zusammenzufassen.
Du kannst
export MYSQL_PWD=yourverysecretpassword
.Der Vorteil dieser Methode gegenüber der Verwendung einer Konfigurationsdatei besteht darin, dass Sie keine separate Konfigurationsdatei benötigen, um mit Ihrem Skript synchron zu bleiben. Sie müssen nur das Skript warten.
Es ist kein Nachteil dieser Methode.
Das Kennwort ist für andere Benutzer im System nicht sichtbar (es wäre sichtbar, wenn es sich in der Befehlszeile befindet). Die Umgebungsvariablen sind nur für den Benutzer sichtbar, der den Befehl mysql und root ausführt.
Das Kennwort ist auch für alle sichtbar, die das Skript selbst lesen können. Stellen Sie daher sicher, dass das Skript selbst geschützt ist. Dies unterscheidet sich in keiner Weise vom Schutz einer Konfigurationsdatei. Sie können das Kennwort weiterhin aus einer separaten Datei beziehen, wenn das Skript öffentlich lesbar sein soll (
export MYSQL_PWD=$(cat /root/mysql_password)
. Es ist immer noch einfacher, eine Variable zu exportieren, als eine Konfigurationsdatei zu erstellen.Z.B,
quelle