Чтобы решить проблемы
безопасности, которые могут
возникнуть при использовании
команды LOAD DATA LOCAL,в MySQL
3.23.49 и MySQL 4.0.2 были добавлены новые
опции.
При поддержке этой команды могут возникнуть две проблемы:
Первая: поскольку чтение файла инициируется сервером, теоретически имеется возможность создать ``доработанный'' при помощи патча сервер MySQL, способный читать любые файлы на клиентской машине, к которой текущий пользователь имеет доступ для чтения, в то время, когда клиент направляет запрос к таблице.
Вторая: в веб-среде, в которой
подсоединение клиентов
осуществляется с веб-сервера,
пользователь может использовать
команду LOAD DATA LOCAL для
чтения любых файлов, к которым
процесс веб-сервера имеет доступ
для чтения (если предположить, что
пользователь может выполнять на
сервере SQL любые команды).
Эти проблемы решаются с помощью двух следующих исправлений:
Если вы конфигурируете MySQL без
опции --enable-local-infile, то
команда LOAD DATA LOCAL будет
запрещена для всех клиентов, если,
конечно, они не будут вызывать
mysql_options (... MYSQL_OPT_LOCAL_INFILE,
0). Обратитесь к разделу See
Раздел 8.4.3.39, «mysql_options()».
В случае клиента mysql, LOAD DATA
LOCAL может быть разблокирована
заданием опции --local-infile[=1]
или заблокирована с помощью опции
--local-infile=0.
По умолчанию все MySQL-клиенты и
библиотеки компилируются с опцией
--enable-local-infile для
обеспечения совместимости с MySQL
3.23.48 и более старыми версиями.
Блокировку всех команд LOAD DATA
LOCAL на MySQL-сервере можно
осуществить путем запуска
mysqld с опцией
--local-infile=0.
В случае, если команда LOAD DATA
LOCAL INFILE заблокирована на
сервере или клиенте, вы получите
следующее сообщение об ошибке (1148):
The used command is not allowed with this MySQL version
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
