Spec-Zone .ru
спецификации, руководства, описания, API
|
LOAD
DATA
оператор может загрузить файл, который располагается на узле сервера, или это может загрузить
файл, который располагается на хосте клиента когда LOCAL
ключевое слово
определяется.
Есть два потенциальных вопроса безопасности с поддержкой LOCAL
версия LOAD
DATA
операторы:
Передача файла от хоста клиента до узла сервера инициируется сервером MySQL. В
теории исправленный сервер мог быть создан, который скажет клиентской программе передавать файл выбора
сервера, а не файл, названный клиентом в LOAD DATA
оператор. Такой сервер мог получить доступ к любому файлу
на хосте клиента, к которому у клиентского пользователя есть доступ для чтения.
В Веб-среде, где клиенты соединяются от веб-сервера, пользователь мог использовать
LOAD DATA LOCAL
считать любые файлы, к которым у процесса веб-сервера
есть доступ для чтения (предполагающий, что пользователь мог выполнить любую команду против
SQL-сервера). В этой среде клиент относительно сервера MySQL фактически является веб-сервером, не
удаленной программой, выполняемой пользователем, который соединяется с веб-сервером.
Чтобы иметь дело с этими проблемами, мы изменились как LOAD DATA LOCAL
обрабатывается с MySQL 3.23.49 и MySQL 4.0.2 (4.0.13 на Windows):
По умолчанию все клиенты MySQL и библиотеки в двоичных дистрибутивах компилируются
с -DENABLED_LOCAL_INFILE=1
опция, чтобы быть совместимым с MySQL 3.23.48 и прежде.
Если Вы создаете MySQL из источника, но не вызываете CMake
с -DENABLED_LOCAL_INFILE=1
опция, LOAD DATA LOCAL
не может использоваться никаким клиентом, если это не
пишется явно, чтобы вызвать mysql_options(...
MYSQL_OPT_LOCAL_INFILE, 0)
. См. Раздел 21.8.7.49,"mysql_options()
".
Можно отключить все LOAD DATA LOCAL
операторы от стороны сервера, запускаясь mysqld с --local-infile=0
опция.
Для mysql клиента командной строки включить LOAD DATA LOCAL
определяя --local-infile[=1]
опция, или отключают это с --local-infile=0
опция. Для mysqlimport локальная загрузка файла данных прочь по
умолчанию; включите этому с --local
или -L
опция. В любом случае
успешное использование локальной работы загрузки требует, чтобы сервер разрешил это.
Если Вы используете LOAD DATA LOCAL
в сценариях Perl или других программах, которые читают
[client]
группа от файлов опции, можно добавить local-infile=1
опция той группе. Однако, чтобы препятствовать этому вызывать проблемы для программ, которые не понимают
local-infile
, определите это использующий loose-
префикс:
[client]loose-local-infile=1
Если LOAD DATA
LOCAL
отключается, или в сервере или в клиенте, клиент, который пытается сделать такое
заявление, получает следующее сообщение об ошибке:
ERROR 1148: The used command is not allowed with this MySQL version