Die LOAD DATA
-Anweisung kann eine Datei, die
sich auf dem Serverhost befindet, oder eine Datei laden, die auf
dem Clienthost abgelegt ist, wenn das Schlüsselwort
LOCAL
angegeben ist.
Es gibt bei der Unterstützung der
LOCAL
-Version von LOAD
DATA
zwei potenzielle Sicherheitsrisiken:
Die Übertragung der Datei vom Client- auf den Serverhost
wird durch den MySQL-Server eingeleitet. Theoretisch ließe
sich ein gepatchter Server erstellen, der das Clientprogramm
anweisen könnte, eine Datei nach Maßgabe des Servers
(statt der vom Client in der LOAD
DATA
-Anweisung festgelegten Datei) zu übertragen.
Ein solcher Server könnte dann auf jede Datei auf dem
Clienthost zugreifen, auf die der Clientbenutzer Lesezugriff
hat.
In einer Webumgebung, in der die Clients Verbindungen über
einen Webserver herstellen, könnte ein Benutzer mit
LOAD DATA LOCAL
beliebige Dateien lesen,
auf die der Webserverprozess Lesezugriff hat (vorausgesetzt,
der Benutzer kann einen beliebigen Befehl den SQL-Server
betreffend ausführen). In dieser Umgebung ist der Client
aus Sicht des MySQL-Servers eigentlich der Webserver und
nicht das entfernte Programm, das von dem Benutzer
ausgeführt wird, der die Verbindung zum Webserver
hergestellt hat.
Um diese Probleme zu beheben, haben wir die Verfahrensweise für
LOAD DATA LOCAL
beginnend mit MySQL 3.23.49
und MySQL 4.0.2 (4.0.13 unter Windows) wie folgt geändert:
Standardmäßig werden alle MySQL-Clients und -Bibliotheken
mit der Option --enable-local-infile
kompiliert, um die Kompatibilität mit MySQL 3.23.48 und
vorher aufrechtzuerhalten.
Wenn Sie MySQL aus der Quelldistribution erstellt, aber
configure nicht mit der Option
--enable-local-infile
aufgerufen haben,
kann LOAD DATA LOCAL
nicht von beliebigen
Clients verwendet werden, sofern nicht ausdrücklich der
Aufruf von mysql_options(...
MYSQL_OPT_LOCAL_INFILE, 0)
einkompiliert wurde.
Siehe auch Abschnitt 24.2.3.48, „mysql_options()
“.
Sie können alle LOAD DATA LOCAL
-Befehle
auf der Serverseite deaktivieren, indem Sie
mysqld mit der Option
--local-infile=0
starten.
Für den Befehlszeilenclient mysql kann
LOAD DATA LOCAL
durch Angabe der Option
--local-infile[=1]
aktiviert bzw. mit der
Option --local-infile=0
deaktiviert werden.
Ähnlich aktiviert die Option --local
bzw.
-L
das Laden lokaler Dateien für
mysqlimport. In jedem Fall setzt die
erfolgreiche Verwendung einer lokalen Ladeoperation voraus,
dass die Durchführung derartiger Operationen durch den
Server zugelassen ist.
Wenn Sie LOAD DATA LOCAL
in Perl-Skripten
oder anderen Programmen verwenden, die den Abschnitt
[client]
aus Optionsdateien auslesen,
können Sie die Option local-infile=1
in
diesem Abschnitt hinzufügen. Allerdings sollten Sie sie mit
dem Präfix loose-
versehen, um Probleme
mit Programmen zu vermeiden, die
local-infile
nicht verstehen:
[client] loose-local-infile=1
Wenn LOAD DATA LOCAL INFILE
deaktiviert
ist – sei es am Server oder am Client –, dann erhält
ein Client, der eine solche Anweisung abzusetzen versucht,
die folgende Fehlermeldung:
ERROR 1148: The used command is not allowed with this MySQL version
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.