load data local infile 與load data infile的區別與注意事項

若是你沒有給出local,則服務器按以下方法對其進行定位:
1)若是你的filename爲絕對路徑,則服務器從根目錄開始查找該文件.
2)若是你的filename爲相對路徑,則服務器從數據庫的數據目錄中開始查找該文件.
若是你給出了local,則文件將按如下方式進行定位:
1)若是你的filename爲絕對路徑,則客戶機從根目錄開始查找該文件.
2)若是你的filename爲相對路徑,則客戶機從當前目錄開始查找該文件.

另外要注意:
In MySQL 3.23.49 and MySQL 4.0.2, we added some new options to deal with possible security issues when it comes to LOAD DATA LOCAL.

There are two possible problems with supporting this command:

As the reading of the file is initiated from the server, one could theoretically create a patched MySQL server that could read any file on the client machine that the current user has read access to, when the client issues a query against the table.

In a web environment where the clients are connecting from a web server, a user could use LOAD DATA LOCAL to read any files that the web server process has read access to (assuming a user could run any command against the SQL server).

There are two separate fixes for this:

If you don't configure MySQL with --enable-local-infile, then LOAD DATA LOCAL will be disabled by all clients, unless one calls mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0) in the client. See section 8.1.3.163 mysql_options().

For the mysql command-line client, LOAD DATA LOCAL can be enabled by specifying the option --local-infile[=1], or disabled with --local-infile=0.

By default, all MySQL clients and libraries are compiled with --enable-local-infile, to be compatible with MySQL 3.23.48 and before.

One can disable all LOAD DATA LOCAL commands in the MySQL server by starting mysqld with --local-infile=0.

In the case that LOAD DATA LOCAL INFILE is disabled in the server or the client, you will get the error message (1148):

The used command is not allowed with this MySQL version
mysql

相關文章
相關標籤/搜索