Невозможно отключить LOCAL INFILE (по соображениям безопасности) в mysql Ver 14.14 Distrib 5.5.25a, для debian-linux-gnu (i686) с использованием readline 6.2 в ubuntu 12.04; Вот мой /etc/mysql/my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
loose-local-infile=0
local-infile=0
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
local-infile=0
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
я делаю
sudo /etc/init.d/mysql restart
mysql -u root -p
mysql> SELECT load_file("/etc/passwd");
И он показывает мне мой / etc / passwd контент. Так что это не сработало.
Из Документы MySQL для load_file ссылки, можно увидеть, что load_file - это функция MySQL, которая возвращает содержимое файла в виде строки. Больше он ничего не делает. Это не имеет ничего общего с local_infile.
В целях безопасности из тех же документов:
Если для системной переменной secure_file_priv задано непустое имя каталога, загружаемый файл должен находиться в этом каталоге.
Итак, если вы установите системную переменную secure_file_priv, тогда файл должен находиться в этом конкретном каталоге. Более того, для выполнения этого оператора пользователю требуются привилегии уровня файла. Просто не давайте пользователям, которые обращаются к базе данных, права на уровне файлов, если вы хотите, чтобы она была защищена.
Дальше local-infile для ЗАГРУЗИТЬ ДАННЫЕ операторы, которые загружают данные в таблицу, тем самым влияя на таблицы. Это не имеет ничего общего с функцией load_file ().