[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Sehr seltsames Verhalten von MySQL Datenbank



Hi,

Sandro Frenzel wrote:
> Hallo Liste,
> 
> Wenn ich meinen Datenbank-Server mit der Option --user=mysql starte, 
> so läuft dieser doch mit den Rechten von dem Benutzer "mysql", 
> richtig?
> 
> Das heißt, ich kann Dateien, die der Benutzer mysql lesen kann mit 
> LOAD_FILE("datei") auch in die Datenbank schreiben, richtig?
> 
> Wäre auch logisch, nur leider wehrt sich MySQL dagegen den LOAD_FILE() 
> Befehl anzuwenden.
> 
> -rwx------  1 mysql mysql 770 2007-02-16 13:06 /home/sandro/test.pl
> 
> Diese Rechte reichen für ein LOAD_FILE nicht aus. Wieso?
> 
> -rwxrwxrwx  1 mysql mysql 770 2007-02-16 13:06 /home/sandro/test.pl
> 
> tuts hingegen.
> 
> Die MySQL Doku sagt zu LOAD_FILE():
> 
> Liest die Datei und gibt den Dateiinhalt als String zurück. Damit 
> diese Funktion verwendet werden kann, muss die Datei auf dem 
> Serverhost liegen. Sie benötigen die Berechtigung FILE und müssen den 
> vollständigen Pfadnamen der Datei angeben. Die Datei muss von allen 
> lesbar und ihre Größe geringer als max_allowed_packet Bytes sein.
> 
> Wenn die Datei nicht vorhanden ist oder nicht gelesen werden kann, 
> weil eine der vorherigen Bedingungen nicht erfüllt ist, gibt die 
> Funktion NULL zurück. 
> 
> 
> Eine "file test.pl" tuts auch mit 700 Rechten, jedoch schreibt er da 
> NULL in die Datenbank, was auf das Nichtlesenkönnen hindeutet.
> 
> Stehe gerade wirklich auf dem Schlauch, weil ich mir das Verhalten 
> _absolut_ nicht erklären kann.
> 
> 
> Ich hoffe mir kann jemand helfen...!

ich hänge mich mal hier an, da ich mich nicht entscheiden kann,
an welcher Stelle im Thread die beste Position wäre ;-)

Wie Du ja schon selber geschrieben hast, ist es völlig egal, als
welcher User die datenbank läuft, die Datei, welche Du einlesen
willst muss 'world readable' sein, ansonsten kann sie von den
Server Prozessen nicht gelesenen werden.
Bei Oracle wird das Verzeichnis, in welches/aus welchem gelesen
werden darf, über UTL_FILE_DIR konfiguriert.
Das Verzeichnis muss dabei von dem User, unter welchem die Oracle
Prozesse laufen, mindestens lesbar sein.
Dasselbe Verhalten könnte man nun von mysql erwarten, dem ist aber
(leider) nicht so.
Anscheinend wird der Prozess zum Lesen der Datei mit anderen Rechten
(nobody?) als der Serverdienst selbst ausgeführt oder es wird geprüft,
ob die Datei 'world readable' ist.
Da müsste man wohl mal in die Sourcen schauen.

BTW, welche Version benutzt Du?

Gruss
Reinhold



Reply to: