4.2.4 Вопросы безопасности, относящиеся к команде LOAD DATA LOCAL
Чтобы решить проблемы безопасности, которые могут возникнуть при
использовании команды 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 section 8.4.3.159 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