为啥 MySQL 禁用加载本地 infile 不起作用?

Posted

技术标签:

【中文标题】为啥 MySQL 禁用加载本地 infile 不起作用?【英文标题】:Why MySQL disable load local infile is not working?为什么 MySQL 禁用加载本地 infile 不起作用? 【发布时间】:2015-06-06 04:53:38 【问题描述】:

作为安全强化的一部分,我正在尝试禁用 local_infile 并防止有人访问操作系统的本地文件。根据文档,我可以通过在 my.cnf 中设置变量 local-infile=0 或使用选项 --local-infile=0 启动 mysqld 服务来禁用它。但是使用任何选项我都可以加载本地文件。

我尝试先添加/etc/my.cnf

[mysqld]
local-infile=0

之后,我确认更改得到反映。

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   | 
+---------------+-------+
1 row in set (0.00 sec)

然后我从 mysql 客户端使用 load_file 加载了本地文件

mysql> SELECT  load_file("/etc/passwd");

上面的命令显示 /etc/passwd 文件的内容,即使 local_infile 被禁用。谁能告诉这里出了什么问题?

我从通过mysqld --local-infile=0 开始重复相同的步骤,但没有改变。我也尝试使用--local-infile=0 选项启动mysql 客户端,但没有区别。

【问题讨论】:

我已经完成了你所拥有的,它对我有用。如果我尝试使用 load_file,任何文件的内容都会返回为 NULL 【参考方案1】:

在你的mysql数据库中使用这个查询

步骤:1

  SHOW GLOBAL VARIABLES LIKE 'local_infile';

步骤:2

SET GLOBAL local_infile = 'ON';

步骤:3

 SHOW GLOBAL VARIABLES LIKE 'local_infile';

【讨论】:

我的意图是禁用 local_infile 并防止有人访问 os 本地文件。 我不认为这回答了原来的问题!

以上是关于为啥 MySQL 禁用加载本地 infile 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 加载数据本地 Infile - 路径作为用户变量

如何为 AWS RDS 加载数据 infile mysql 工作台?

使用html表单导入csv数据...使用PHP脚本加载数据infile和MySQL

LOAD DATA INFILE 在 mariadb 中不起作用

禁用local_infile

禁用local_infile