程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 解析:MySQL中LOAD DATA LOCAL安全問題

解析:MySQL中LOAD DATA LOCAL安全問題

編輯:關於MYSQL數據庫

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

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

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

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

要處理這些問題,我們更改了MySQL 3.23.49和MySQL 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_本地_INFILE,0)。參見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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved