Hallo Thomas,
From: Thomas Lewandowski [mailto:Big_Thomas@gmx.de] Sent: Wednesday, December 29, 2004 1:33 AM To: suse-linux@suse.com Subject: Aus einem Bash Skript in mysql schreiben?
ich will aus einem bash Skript direkt in meine mysql Datenbank schreiben. Also erst Verbinden usw.(so wie in php mysql_connect usw.)? Ich finde leider nichts bei google -> könnte mir einer von euch weiterhelfen?
#!/bin/sh HOST= USER= PASSWORD= DATENBANK= statement="select SPALTE from TABELLE where WHEREBEDINGUNG" echo $statement > statement.sql `mysql -C -N -h $HOST -u $USER -p$PASSWORD $DATENBANK < statement.sql > result.txt`
Ist nicht besonders elegant, sollte jedoch funktionieren.
Gruß Johannes
Etwas uebersichtlicher und ohne Zwischendatei geht es mit einem HERE-Dokument:
----------------------
[...] mysql -h $HOST -u $USER -t -p$PWD $DATENBANK > $ERGEBNIS <<EOF
SELECT ... FROM ... WHERE ...="$WERT1" AND ...="$WERT2" ORDER BY ...;
EOF
----------------------
Wie man sieht, kann man die Werte der Abfrage ueber Shell-Variable parametrisieren. Das funktioniert natürlich auch für alle anderen SQL-Befehle fuer Eingabe, Datenladen usw.
Gruss Wolfgang
On Wed, Dec 29, 2004 at 08:32:53AM +0100, Rinke, Johannes wrote:
Hallo Thomas,
From: Thomas Lewandowski [mailto:Big_Thomas@gmx.de] Sent: Wednesday, December 29, 2004 1:33 AM To: suse-linux@suse.com Subject: Aus einem Bash Skript in mysql schreiben?
ich will aus einem bash Skript direkt in meine mysql Datenbank schreiben. Also erst Verbinden usw.(so wie in php mysql_connect usw.)? Ich finde leider nichts bei google -> könnte mir einer von euch weiterhelfen?
#!/bin/sh HOST= USER= PASSWORD= DATENBANK= statement="select SPALTE from TABELLE where WHEREBEDINGUNG" echo $statement > statement.sql `mysql -C -N -h $HOST -u $USER -p$PASSWORD $DATENBANK < statement.sql > result.txt`
Ist nicht besonders elegant, sollte jedoch funktionieren.
Gruß Johannes
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hallo Wolfgang, hallo Johannes, hallo Leute,
Am Mittwoch, 29. Dezember 2004 12:26 schrieb Wolfgang Hamedinger:
Etwas uebersichtlicher und ohne Zwischendatei geht es mit einem HERE-Dokument:
[...]
WHERE ...="$WERT1" AND
[...]
Wie man sieht, kann man die Werte der Abfrage ueber Shell-Variable parametrisieren.
Man kann sich auf diese Weise aber auch recht schnell eine Sicherheitslücke einhandeln: WERT='"; DROP TABLE xy; '
Das Zauberwort lautet hier Überprüfung der Parameter, nur dass das mit Perl oder PHP deutlich einfacher geht als in der Bash.
[TOFU gelöscht - bitte http://learn.to/quote]
Gruß
Christian Boltz
Hallo Christian,
natuerlich hast Du recht, aber ich bin da jetzt auch von einer ganz privaten Nutzung mit kontrolliertem Einsatzbereich ausgegangen; oeffentlich und unkontrolliert wuerde ich das auch nicht über ein Shell-Skript machen wollen. Allerdings ist das Skript mit einem HERE-Dokument aus meiner Sicht tatsaechlich sehr viel leichter lesbar (allein, weil man die Abfrage deutlich strukturierter hinschreiben kann) - letztendlich aber klarerweise eine Geschmackssache.
Gruss und guten Rutsch Wolfgang
On Wed, Dec 29, 2004 at 07:55:26PM +0100, Christian Boltz wrote:
Hallo Wolfgang, hallo Johannes, hallo Leute,
Am Mittwoch, 29. Dezember 2004 12:26 schrieb Wolfgang Hamedinger:
Etwas uebersichtlicher und ohne Zwischendatei geht es mit einem HERE-Dokument:
[...]
WHERE ...="$WERT1" AND
[...]
Wie man sieht, kann man die Werte der Abfrage ueber Shell-Variable parametrisieren.
Man kann sich auf diese Weise aber auch recht schnell eine Sicherheitslücke einhandeln: WERT='"; DROP TABLE xy; '
Das Zauberwort lautet hier Überprüfung der Parameter, nur dass das mit Perl oder PHP deutlich einfacher geht als in der Bash.
[TOFU gelöscht - bitte http://learn.to/quote]
Gruß
Christian Boltz
Lass Dir kein X für ein U vormachen, sei auf der Hxt!
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Mittwoch, 29. Dezember 2004 08:32 schrieb Rinke, Johannes:
echo $statement > statement.sql `mysql -C -N -h $HOST -u $USER -p$PASSWORD $DATENBANK < statement.sql
result.txt`
Wieso die Zwischendatei?
echo $statement | mysql ...
geht direkt und ist ein Zwischenschritt (und potentieller Angriffspunkt) weniger.