Spec-Zone.ru › MySQL 5.7

6.1.6 Безопасность при использовании LOAD DATA LOCAL

Оператор LOAD DATA загружает файл данных в таблицу. Оператор может загружать файл, расположенный на хосте сервера, или, если указано ключевое слово LOCAL, на хосте клиента.

В версии LOCAL LOAD DATA существуют две потенциальные проблемы безопасности:

  • Так как LOAD DATA LOCAL является оператором SQL, его обработка происходит на стороне сервера, а передача файла с хоста клиента на хост сервера инициируется сервером MySQL, который сообщает клиенту имя файла, указанное в операторе. Теоретически, исправленный сервер может попросить клиента передать файл по своему выбору вместо файла, указанного в операторе. Такой сервер может получить доступ к любому файлу на хосте клиента, к которому у пользователя клиента есть права чтения. (На самом деле, исправленный сервер может ответить запросом на передачу файла для любого оператора, а не только LOAD DATA LOCAL, поэтому более фундаментальная проблема заключается в том, что клиенты не должны подключаться к недоверенным серверам.)

  • В веб-среде, где клиенты подключаются с веб-сервера, пользователь может использовать LOAD DATA LOCAL для чтения любых файлов, к которым есть доступ у процесса веб-сервера (при условии, что пользователь может выполнять любые операторы на SQL-сервере). В этой среде клиент по отношению к серверу MySQL фактически является веб-сервером, а не удалённой программой, выполняемой пользователями, подключёнными к веб-серверу.

Для предотвращения подключения к недоверенным серверам клиенты могут установить защищённое соединение и проверить идентификацию сервера, подключившись с помощью параметра --ssl-mode=VERIFY_IDENTITY и соответствующего сертификата CA. Для реализации этой проверки необходимо убедиться, что сертификат CA сервера надёжно доступен реплике, в противном случае возникнут проблемы с доступностью. Дополнительную информацию см. в разделе Параметры команд для защищённых соединений.

Чтобы избежать проблем с LOAD DATA, клиенты должны избегать использования LOCAL.

Администраторы и приложения могут настроить разрешение загрузки локальных данных следующим образом:

  • На стороне сервера:

    • Переменная среды local_infile управляет возможностью LOCAL на стороне сервера. В зависимости от значения local_infile, сервер отклоняет или разрешает загрузку локальных данных клиентами, которые запрашивают загрузку локальных данных.

    • По умолчанию, local_infile включена. Чтобы заставить сервер явно отклонить или разрешить операторы LOAD DATA LOCAL (независимо от того, как настроен процесс компиляции и запуска клиентских программ), запустите mysqld с параметром local_infile, выключенным или включённым. local_infile также может быть установлено во время выполнения.

  • На стороне клиента:

    • Параметр ENABLED_LOCAL_INFILE CMake управляет включённой по умолчанию возможностью LOCAL для библиотеки MySQL клиента (см. Раздел 2.8.7, «Параметры конфигурации исходного кода MySQL»). Таким образом, клиенты, не выполняющие явных настроек, имеют возможность LOCAL выключенную или включенную в соответствии с параметром ENABLED_LOCAL_INFILE, указанным во время компиляции MySQL.

    • По умолчанию, библиотека клиента в дистрибутивах MySQL в двоичном формате скомпилирована с включенной ENABLED_LOCAL_INFILE. Если вы компилируете MySQL из исходного кода, настройте его с ENABLED_LOCAL_INFILE выключенным или включённым, в зависимости от того, должна ли возможность LOCAL быть отключена или включена для клиентов, не выполняющих явных настроек.

    • Для клиентских программ, использующих API C, возможность загрузки локальных данных определяется значением по умолчанию, установленным в библиотеке MySQL клиента. Для явного включения или отключения используйте функцию API C для отключения или включения опции MYSQL_OPT_LOCAL_INFILE. См. .

    • Для клиента mysql возможность загрузки локальных данных определяется по умолчанию, установленной в библиотеке MySQL клиента. Для явного отключения или включения используйте опции --local-infile=0 или --local-infile[=1].

    • Для клиента mysqlimport по умолчанию загрузка локальных данных не используется. Для явного отключения или включения используйте опции --local=0 или --local[=1].

    • Если вы используете LOAD DATA LOCAL в скриптах Perl или других программах, которые читают группу [client] из файлов опций, вы можете добавить настройку опции local-infile в эту группу. Чтобы избежать проблем для программ, которые не понимают эту опцию, укажите её с префиксом loose-:

      [client]
      loose-local-infile=0
      

      или:

      [client]
      loose-local-infile=1
      
    • Во всех случаях, успешное выполнение операции загрузки локальных данных клиентом также требует разрешения загрузки на сервере.

Если возможность LOCAL отключена, либо на серверной, либо на клиентской стороне, клиент, пытающийся выполнить оператор LOAD DATA LOCAL, получит следующее сообщение об ошибке:

ERROR 1148: The used command is not allowed with this MySQL version

MySQL Shell и загрузка локальных данных

MySQL Shell предоставляет ряд утилит для выгрузки таблиц, схем или серверных экземпляров и загрузки их в другие экземпляры. При использовании этих утилит для обработки данных, MySQL Shell предоставляет дополнительные функции, такие как предварительная обработка входных данных, многопоточная параллельная загрузка, сжатие и распаковку файлов, а также доступ к ведрам хранилища Oracle Cloud Infrastructure Object Storage. Для лучшей функциональности всегда используйте последнюю доступную версию утилит выгрузки и загрузки данных MySQL Shell.

Утилиты загрузки данных MySQL Shell используют операторы LOAD DATA LOCAL INFILE для загрузки данных, поэтому системная переменная local_infile должна быть установлена в значение ON на целевом серверном экземпляре. Вы можете сделать это перед загрузкой данных и снова удалить её после этого. Утилиты безопасно обрабатывают запросы передачи файлов, учитывая соображения безопасности, обсуждаемые в этой теме.

MySQL Shell включает следующие утилиты выгрузки и загрузки данных:

Утилита экспорта таблицы util.exportTable()

Экспортирует реляционную таблицу MySQL в файл данных, который можно загрузить на экземпляр сервера MySQL с помощью утилиты параллельного импорта таблиц MySQL Shell, импортировать в другое приложение или использовать в качестве логической резервной копии. Утилита имеет предопределенные опции и опции настройки для создания различных форматов выходных данных.

Утилита параллельного импорта таблиц util.importTable()

Импортирует файл данных в реляционную таблицу MySQL. Файл данных может быть результатом работы утилиты экспорта таблиц MySQL Shell или другого формата, поддерживаемого предопределенными и настраиваемыми опциями утилиты. Утилита может выполнять предварительную обработку входных данных перед добавлением данных в таблицу. Она может принимать несколько файлов данных для слияния в одну реляционную таблицу и автоматически распаковывать сжатые файлы.

Утилита выгрузки экземпляра util.dumpInstance(), утилита выгрузки схемы util.dumpSchemas() и утилита выгрузки таблицы util.dumpTables()

Экспортирует экземпляр, схему или таблицу в набор файлов выгрузки, которые затем можно загрузить на экземпляр MySQL с помощью утилиты загрузки выгрузки MySQL Shell. Утилиты предоставляют потоковую передачу данных из Oracle Cloud Infrastructure Object Storage, проверки и модификации совместимости с MySQL HeatWave Service, а также возможность проведения пробного запуска для выявления проблем перед продолжением выгрузки.

Утилита загрузки выгрузки util.loadDump()

Импортирует файлы выгрузки, созданные с помощью утилиты выгрузки экземпляра, схемы или таблицы MySQL Shell, в систему баз данных MySQL HeatWave Service или экземпляр MySQL Server. Утилита управляет процессом загрузки и предоставляет потоковую передачу данных из удаленного хранилища, параллельную загрузку таблиц или фрагментов таблиц, отслеживание состояния прогресса, возможности возобновления и сброса, а также возможность одновременной загрузки, пока выгрузка еще выполняется. Утилиту параллельного импорта таблиц MySQL Shell можно использовать в сочетании с утилитой загрузки выгрузки для изменения данных перед загрузкой их в целевой экземпляр MySQL.

Подробности об утилитах см. .

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/load-data-local-security.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API