如何在MySql 5.5 Ubuntu 12.04中禁用LOCAL INFILE

无法禁用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()函数无关。