普通用戶執行 SELECT * INTO OUTFILE 'path' FROM tbl 報錯:
ERROR 1045 (28000): Access denied for user 'my_user'@'%' (using password: YES)
已授權 GRANT ALL ON my_db.* TO 'my_user'@'%' 但無效。
INTO OUTFILE 需要 全局 FILE 權限,不屬於庫級權限體系。GRANT ALL ON db.* 僅覆蓋該庫的對象權限,**不包含 FILE**。*.*(全局)。SHOW GRANTS FOR 'my_user'@'%'; -- 應包含:GRANT FILE ON *.* TO 'my_user'@'%'
| 方法 | 需權限 | 適用場景 | 備註 |
|---|---|---|---|
| SELECT INTO OUTFILE | FILE | 服務器本地導出 | 文件生成在服務器,需服務器寫權限 |
| mysqldump | SELECT, LOCK TABLES, SHOW VIEW 等 | 邏輯備份、跨機器遷移 | 客戶端執行,無需服務器 FILE 權限 |
| mysql -e "SQL" > file | SELECT | 簡單查詢導出文本/CSV | 客戶端重定向,最通用 |
| Workbench/Navicat 導出 | SELECT | 圖形化導出 Excel/CSV/JSON | 工具內部用 SELECT + 客戶端寫文件 |
SHOW VARIABLES LIKE 'secure_file_priv',文件路徑必須在該目錄下。