Zugriff auf das Dateisystem mit Hilfe von SQL

Gerade bin ich auf eine nette Möglichkeit in MySQL gestoßen, um das Dateisystem anzuzapfen und wertvolle Informationen beispielsweise über die Existenz von Dateien und Ordnern oder deren Inhalt zu erhalten. Das kann sehr hilfreich als Alternative für die php-Funktion file_exists sein, da die Information der Existenz der Datei(en) noch im Query für weitere Sortierungs- und Aggregationsfunktionen verwendet werden kann.


Sofern der zugehörige Datenbankbenutzer das FILE-Privileg inne hat, kann man mit dem Befehl

SELECT LOAD_FILE(*PFAD ZUR DATEI*)

während des Queries nicht nur prüfen, ob eine Datei existiert, sondern auch deren Inhalt auslesen.

Auf Windows-Systemen ist zu beachten, dass Backslashes im Pfad zur Datei entsprechend gekennzeichnet werden müssen (Beispiel: C:\\Windows\\System32\\drivers\\etc\\hosts). Auch sollte man den Sicherheitsaspekt nicht völlig außer Acht lassen, da mit der Gewährung des FILE-Privilegs ein Zugriff auf die Datenbank automatisch einen Zugriff auf das restliche Dateisystem bedeutet.

Damit nicht nur NULL-Werte zurückgegeben werden, muss sichergestellt sein, dass der Benutzer, der MySQL ausführt, Leserechte besitzt.

Um auch auf große Dateien zuzugreifen, muss die globale Eigenschaft "max_allowed_packet", die auf 1 MB gesetzt ist, erhöht werden.

mysql -u... -p...
set global max_allowed_packet = 1024 * 1024 * 512;
exit;

Nun kann man (nach einem Serverneustart) auch auf Dateien zugreifen, die bis zu 512 MB groß sein dürfen.

Zurück