LOAD DATA 默认读的是服务器上的文件,但是加上LOCAL参数后,就可以将本地具有访问权限的文件加载到数据库中。这在带来方便的同时。也带来了以下安全问题:
1、可以任意加载本地文件到数据库。
2、在WEB环境中,客户从WEB服务器连接,用户可以使用LOAD DATA LOCAL语句来读取WEB服务器进程有读访问权限的任何文件(假定用户可以运行SQL服务器的任何命令)。在这种环境中,MySQL服务器的客户实际上是WEB服务器,而不是连接WEB服务器的用户运行的程序。
解决方法:
1、 可以用--local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令。
即是在/etc/my.cnf的[mysqld]下面添加local-infile=0选项。
2、 对于mysql命令行的客户端,可以通指定--local-infile[=1]选项启用LOAD DATA LOCAL命令,
或通过--local-infile=0选项禁用。
类似地,对于mysqlimport,--local or -L选项启用本地数据库文件装载。在任何情况下,成功进行本地装载需要服务器启有相关选项。
如下为实操例子:
1、/etc/my.cnf
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table