关闭LOAD DATA INFILE或INTO OUTPUT

时间:2014-05-01 20:00:59

标签: mysql sql security

作为一个有安全意识的人,在SQL注入发生的可能性很小的情况下,我希望尽量减少造成的损害。一种可能性是存在可以向本地文件系统上的文件读取和写入信息的查询。在安全漏洞的情况下,这显然是一个主要问题,并且这些命令的使用在日常使用中相当有限。可选地,如果我需要导入和导出数据,它可以在一段隔离的时间内打开,但我希望在任何其他时间明确关闭它。没有任何谷歌搜索或浏览MySQL手册导致我进入一个特定的设置,允许我禁用此选项。

我知道我可以轻松地撤销所有用户的权限,但我想要一个更简单的解决方案,默认情况下会增加我的安全性(至少在这种特定情况下)。

有没有人知道在MySQL中停用任何文件交互的任何设置或方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

http://dev.mysql.com/doc/refman/5.6/en/load-data.html说:

  

此外,要在服务器文件上使用LOAD DATA INFILE,您必须具有FILE权限。

http://dev.mysql.com/doc/refman/5.6/en/select-into.html说:

  

SELECT ... INTO OUTFILE 'file_name'形式SELECT将所选行写入文件。该文件是在服务器主机上创建的,因此您必须具有FILE权限才能使用此语法。

您还可以设置secure_file_priv配置变量:

  

默认情况下,此变量为空。如果设置为目录名称,则会限制LOAD_FILE()函数以及LOAD DATASELECT ... INTO OUTFILE语句仅对该目录中的文件起作用。

Percona Server, secure_file_priv中还有一个用法:

  

当不带参数使用时,LOAD_FILE()函数将始终返回NULL。 LOAD DATA INFILESELECT INTO OUTFILE语句将失败,并显示以下错误:“MySQL服务器正在运行–secure-file-priv选项,因此无法执行此语句”。