Mysql 命令 load data infile 權限問題

【1】Mysql命令load data infile 執行權限問題html

工做中,常常會遇到往線上環境mysql數據庫批量導入源數據的場景。mysql

針對這個場景問題,mysql有一個很高效的命令:load data infilesql

經過load data infile命令將data_file文件數據導入表中。數據庫

固然,由於mysql數據庫權限限制的問題,分爲如下幾種狀況:安全

(1)root用戶(特指mysql的root,非Linux系統的root)this

在mysql server部署機器經過load data infile命令導入數據時,只要文件路徑指定正確,通常不會有問題。spa

若是導入失敗,請參見隨筆《Mysql 導入文件提示 --secure-file-priv option 問題操作系統

(2)非root用戶在mysql server部署機器經過load data infile命令導入數據時,報錯:server

ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES)htm

這個錯誤通常是由於非root用戶沒有FILE Privilege權限,查詢當前用戶權限可參見隨筆《Mysql 用戶及權限

兩種解決方案:

[1] 命令加local參數。用load data local infile 'filename' into table 來導入數據(強烈推薦使用)

[2] 爲當前用戶開通權限。給當前用戶開通FILE Privilege權限時,注意:

FILE權限與SELECE/DELETE/UPDATE等不一樣,後者是能夠具體指定到某個db的某個表的,而FILE則是全局的,

即只能經過grant FILE on *.* to 'abcde'@'%'才能使FILE權限對全部db的全部tables生效。

經過grant all on db.* to 'abcde'@'%'不能使指定的user在指定的db上具備FILE權限。

根據最小權限原則(操做系統安全的概念),這個方法並不安全,故不推薦使用。

(3)非root用戶從client機器load data local infile至remote mysql server時,報錯:

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

可能緣由(from mysql reference manual):

If LOAD DATA LOCAL is disabled, either in the server or the client, a client that attempts to issue such a statement receives the following error message:

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

可見,出於安全考慮,默認是不容許從client host遠程經過load data命令導數據的

解決辦法:

For the mysql command-line client, enable LOAD DATA LOCAL by specifying the --local-infile[=1]option, or disable it with the --local-infile=0 option

也即,在須要從client host導人數據的場景下,當登錄mysql時,需用--local-infile[=1]顯式指定參數,典型命令形式爲:

mysql --local-infile -u user -p passwd

登錄成功後,再執行load data infile 'filename' into table便可。

 

Good Good Study, Day Day Up.

順序 選擇 循環 總結

相關文章
相關標籤/搜索