top
Loading...
5.6.4.LOADDATALOCAL安全問題
5.6.4. LOAD DATA LOCAL安全問題

LOAD DATA語句可以裝載服務器主機上的文件,若指定LOCAL關鍵字,可以裝載客戶端文件。

支持LOCAL版本的LOAD DATA語句有兩個可能的安全問題:

·         MySQL服務器啟動文件從客戶端向服務器主機的傳輸。理論上,打過補丁的服務器可以告訴客戶端程序傳輸服務器選擇的文件,而不是客戶用LOAD DATA語句指定的文件。這樣服務器可以訪問客戶端上客戶有讀訪問權限的任何文件。

·         Web環境中,客戶從Web服務器連接,用戶可以使用LOAD DATA LOCAL來讀取Web服務器進程有讀訪問權限的任何文件(假定用戶可以運行SQL服務器的任何命令)。在這種環境中,MySQL服務器的客戶實際上是Web服務器,而不是連接Web服務器的用戶運行的程序。

要處理這些問題,我們更改了MySQL 3.23.49MySQL 4.0.2(Windows中的4.0.13)中的LOAD DATA LOCAL的處理方法:

·         默認情況下,現在所有二進制分中的發MySQL客戶端和庫是用--enable-local-infile選項編譯,以便與MySQL 3.23.48和以前的版本兼容。

·         如果你從源碼構建MySQL但沒有使用--enable-local-infile選項來進行configure,則客戶不能使用LOAD DATA LOCAL,除非顯式調用mysql_options (...MYSQL_OPT_本地_INFILE0)。參見25.2.3.48節,“mysql_options()”。

·         你可以用--local-infile=0選項啟動mysqld從服務器端禁用所有LOAD DATA LOCAL命令。

·         對于mysql命令行客戶端,可以通過指定--local-infile[=1]選項啟用LOAD DATA LOCAL,或通過--local-infile=0選項禁用。類似地,對于mysqlimport--local or -L選項啟用本地數據文件裝載。在任何情況下,成功進行本地裝載需要服務器啟用相關選項。

·         如果你使用LOAD DATA LOCAL Perl腳本或其它讀選項文件中的[client]組的程序,你可以在組內添加local-infile=1選項。但是,為了便面不理解local-infile的程序產生問題,則規定使用loose- prefix

·                [client]
·                loose-local-infile=1

·         如果LOAD DATA LOCAL INFILE在服務器或客戶端被禁用,試圖執行該語句的客戶端將收到下面的錯誤消息:

ERROR 1148: The used command is not allowed with this MySQL version
作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗