LOAD DATA LOCAL
安全问题
LOAD DATA
语句可以装载服务器主机上的文件,如果指定了关键字LOCAL
, 则可以装载客户端文件。
因此,支持LOCAL
版本的LOAD DATA
可能存在两个方面的安全问题:
由MySQL服务器启动文件从客户端向服务器主机的传输,理论上,打过补丁的服务器可以告诉客户端程序传输服务器选择的文件,而不是客户用
LOAD DATA
语句指定的文件。这样服务器可以访问客户端上客户有读访问权限的任何文件。在WEB环境中,客户从WEB服务器连接,用户可以使用
LOAD DATA LOCAL
语句来读取WEB服务器进程有读访问权限的任何文件,在这种环境,Mysql 服务器的客户实际上是WEB 服务器,而不是连接WEB服务器的用户运行的程序。
为了避免上述LOAD DATA
问题,客户端应避免使用LOCAL
。 而且为了避免连接到不受信任的服务器,客户端可以建立安全连接,并验证连接。
可以用-local-infile = 0
从服务端禁用所有的LOAD DATA。1
2
3
4
5C:\Users\User>mysql -uroot -p --local-infile=0
Enter password: **********
mysql> load data local infile 'D:/mysql-5.7.13/teacher.txt' into table t;
ERROR 1148 (42000): The used command is not allowed with this MySQL version
相对的,可以通过-local-infile[=1]
选项启用Load data local。
1 | C:\Users\User>mysql -uroot -p --local-infile=1 |
[1]. 参考: https://dev.mysql.com/doc/refman/5.7/en/entering-queries.html