Mysql 命令 load data infile 權限問題


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

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

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

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

當然,因為mysql數據庫權限限制的問題,分為以下幾種情況:

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

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

如果導入失敗,請參見隨筆《Mysql 導入文件提示 --secure-file-priv option 問題

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

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

這個錯誤一般是因為非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.

順序 選擇 循環 總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM