无法禁用LOCAL INFILE(出于安全原因)在MySQL版本14.14 Distrib 5.5.25a,对于debian-linux-gnu(i686)在Ubuntu 12.04上使用readline 6.2; 这是我的/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 Docs的load_file引用,可以看出load_file是MySQL函数,以string的forms返回文件的内容。 它没有什么比这更多。 它与local_infile无关。
出于安全目的,从相同的文档:
如果将secure_file_priv系统variables设置为非空目录名称,则要加载的文件必须位于该目录中。
所以如果你设置了系统variables“secure_file_priv”,那么文件必须存在于那个特定的目录中。 而且,用户需要文件级权限来执行这个语句。 如果您希望保护数据库,请不要将文件级权限授予正在访问数据库的用户。
进一步的本地infile是LOAD DATA语句,它将数据加载到表中,从而影响表。 它与load_file()函数无关。