Welche Datei- und Verzeichnisberechtigungen sind für MySQL LOAD DATA INFILE erforderlich?

7

Ich habe ein Skript, das versucht, einige Daten mit LOAD DATA INFILE in MySQL zu laden. Aus irgendeinem Grund funktioniert es, wenn sich die Datei im Verzeichnis /tmp befindet, jedoch nicht, wenn sich die Datei in einem anderen Verzeichnis mit identischen Berechtigungen befindet. Ich kann keine Möglichkeit finden, MySQL dazu zu bringen, Daten von außerhalb des Verzeichnisses /tmp oder des Datenbankverzeichnisses zu importieren, aber ich kann im Handbuch nichts finden, das erklärt, warum dies der Fall ist.

Die Situation:

%Vor%

AFAICT diese sind in den wichtigen Aspekten identisch. Wenn ich jedoch in der MySQL-Befehlszeile folgendes mache:

%Vor%

Ich erfasse aus Forenbeiträgen, dass errno 13 ein Berechtigungsproblem anzeigt. Es scheint, dass /tmp speziell von MySQL behandelt wird, aber warum? Der nächste, den ich kommen kann, ist eine Zeile im Handbuch:

  

Aus Sicherheitsgründen müssen beim Lesen von Textdateien auf dem Server die Dateien entweder im Datenbankverzeichnis liegen oder für alle lesbar sein.

/tmp befindet sich nicht im Datenbankverzeichnis, aber vielleicht wird es so behandelt, als wäre es. Wie sollte ich Dinge einrichten, damit Dateien außerhalb von /tmp gelesen werden können?

    
Tim Martin 19.10.2010, 18:39
quelle

4 Antworten

16
%Vor%

ODER

%Vor%     
Carl Sanders 01.12.2010 19:47
quelle
2

Ich habe ein ähnliches Problem festgestellt (konnte keine Datei in /tmp lesen) und fügte LOCAL hinzu, nachdem LOAD DATA INFILE das Problem behoben hatte.

Dieser Launchpad-Fehlerbericht könnte einige Erklärungen haben, warum das passiert.

    
David Locke 06.01.2011 17:57
quelle
1

Errno 13 könnte auf SELinux zurückzuführen sein, falls Sie eine Linux-Server-Distribution verwenden (z. B. RedHat Enterprise Linux oder CentOS). Überprüfen Sie 'audit.log', um zu sehen, ob SELinux sich über Ihren /tmp2 -Pfad beschwert. Sie können dann Ihren Pfad über semanage fcontext -a -t mysqld_db_t "/tmp2(/.*)?" hinzufügen und restorecon -R /tmp2 ausführen.

Allerdings könnte die Lösung viel einfacher sein und ich hätte direkt unter Ihrer Frage geantwortet (anstatt eine Antwort zu geben), wenn ich nur wüsste wie ..

    
Joachim 19.10.2010 18:51
quelle
1

Errcode 13 bedeutet fehlende Berechtigungen (im Gegensatz zu Errcode 2, was bedeutet, dass die Datei nicht existiert). MySQL benötigt die Datei, damit sie von jedem gelesen werden kann. Die Berechtigungen Ihrer Dateien sind in Ordnung.

Wir hatten einmal das gleiche Problem auf einem CentOS-Server und es wurde von AppArmor verursacht, was der MySQL-Anwendung verbietet, auf Dateien zuzugreifen, die nicht in einer weißen Liste in /etc/apparmor.d/usr aufgeführt sind. Sbin.mysqld. Vielleicht haben Sie eine Art Sicherheitsanzug, der ein ähnliches Verhalten verursacht?

Wie bereits erwähnt, kann die Verwendung von LOAD DATA INFILE LOCAL eine Umgehungslösung sein.

    
Jan 01.02.2013 09:26
quelle