ubuntuusers.de

MySQL Login per Script

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

rebro

Avatar von rebro

Anmeldungsdatum:
23. Mai 2008

Beiträge: 40

Wohnort: München

Morgen *,

Folgendes Problem, ich muss 110 Datensätze aus einer csv in eine Datenbank einfügen. Doch der automatische Login funktioniert bei mir nicht. Hab ich da einen Denkfehler oder funktioniert das Grundsätlich nicht?

Auszug:

echo "Passwort fuer den MySQL Server"
pasword=`read -s`
[....]    #Deklaration sämtlicher Variablen aus der csv, funktioniert einwandfrei
mysql -u root '''-p$pasword''' cpm <<EOF
#Datenbankbearbeitung
INSERT IGNORE INTO cpg156_users (user_id, user_group, user_active, user_name, user_password, user_regdate, user_email) VALUES ( '$uid', '$gid', 'YES', '$usern', '$paswd', NOW(), '$email');
EOF

Ausgabe:

Passwort fuer den MySQL Server   #read -s Eingabe (soll in $pasword gespeichert werden)
Enter password:                  #aber jetzt fragt er mich erneut und ich möchte ungern 110x das Passwort eingeben

Abgesehen davon funktionert alles wunderbar.

Danke für eure Ideen

greets rebro

radoe2

Anmeldungsdatum:
30. November 2006

Beiträge: 243

rebro schrieb:

Morgen *,

Folgendes Problem, ich muss 110 Datensätze aus einer csv in eine Datenbank einfügen. Doch der automatische Login funktioniert bei mir nicht. Hab ich da einen Denkfehler oder funktioniert das Grundsätlich nicht?

Auszug:

echo "Passwort fuer den MySQL Server"
pasword=`read -s`
[....]    #Deklaration sämtlicher Variablen aus der csv, funktioniert einwandfrei
mysql -u root '''-p$pasword''' cpm <<EOF
#Datenbankbearbeitung
INSERT IGNORE INTO cpg156_users (user_id, user_group, user_active, user_name, user_password, user_regdate, user_email) VALUES ( '$uid', '$gid', 'YES', '$usern', '$paswd', NOW(), '$email');
EOF

Ausgabe:

Passwort fuer den MySQL Server   #read -s Eingabe (soll in $pasword gespeichert werden)
Enter password:                  #aber jetzt fragt er mich erneut und ich möchte ungern 110x das Passwort eingeben

Read funktioniert nicht so wie du dir das vorstellst. Dein Code erwartet, das read die gelesenen Zeichen auf stdout ausgibt, damit du sie pasword zuweisen kannst. Das funktioniert so nicht, read gibt nicht auf stdout aus. Mit deinem Code ist password hinterher leer, folgerichtig fragt mysql danach. Wenn du read benutzen willst, solltest du etwas wie

read -s password

machen. Beachte aber, selbst die Manpage zu mysql meint:

Specifying a password on the command line should be considered insecure...

Besser wäre wohl, dass Password (eventuell temporär) in einer Configdatei abzulegen, siehe z.B. "Option Files" in der MySQL Dokumentation.

rebro

(Themenstarter)
Avatar von rebro

Anmeldungsdatum:
23. Mai 2008

Beiträge: 40

Wohnort: München

Hallo radoe2,

vielen Dank für deine schnelle Antwort.

Der Server ist eine reine TEstmaschine und das einfügen der User wird nur ein einziges mal vorgenommen, daher ist das mit der Sicherheit nebensache. Außerdem habe atm nur ich Zugriff auf den Server 😉

Danke, jetzt funktionierts!

greets rebro

Spelter

Anmeldungsdatum:
10. Januar 2008

Beiträge: 130

Wohnort: Hof

Ich würde einen User anlegen und lokalen login Zulassen, dafür gibt es ja fein granulierte Grants. Beispiel:

mysql> GRANT INSERT ON cpm.* TO 'insert_user'@'localhost';

Wenn du mehr als nur INSERT benötigst, gibst du ihm halt mehr Rechte.

dominator

Avatar von dominator

Anmeldungsdatum:
18. März 2008

Beiträge: 90

Wohnort: Meistens im Bierparadies Oberfranken

Bei mir funktioniert es per --password Option

mysql -u USER --password=PASSWORD DATABASE -e 'SHOW TABLES'

💡

radoe2

Anmeldungsdatum:
30. November 2006

Beiträge: 243

dominator schrieb:

Bei mir funktioniert es per --password Option

mysql -u USER --password=PASSWORD DATABASE -e 'SHOW TABLES'

Natürlich geht es mit --password, du hast aber schon den kompletten Verlauf gelesen? ☹

Antworten |