2015-05-20 92 views
3

我嘗試使用SELECT INTO OUTFILE並使用/tmp以外的目錄。SELECT INTO OUTFILE權限被拒絕,但用戶可以寫入目錄

我的Linux用戶名爲datam,我的MySQL用戶是lea,MySQL運行的是mysql

datam運行mysql -u lea database,並嘗試做SELECT INTO OUTFILE/home/datam/xfers/online/file.csv的路徑,我得到一個錯誤代碼爲13,權限被拒絕。使用/tmp/file.csv工程,所以我相當有信心它不是MySQL中的權限問題。

我已經添加mysqldatam組,並與驗證了這一點:

~$ sudo id mysql 
uid=106(mysql) gid=114(mysql) groups=114(mysql),1001(datam) 

/home/datam/設定爲775遞歸。

如果我做sudo -u mysql /bin/bash並且去/home/datam/xfers/online/並且做touch file它寫一個文件。

我需要做些什麼來允許mysqlSELECT INTO OUTFILE寫入文件?

我相信這不是圍繞這個主題的其他問題的重複,因爲我已經看過他們,並遵循他們的所有指令(在所有目錄中設置執行,導致我想要的,設置GRANT FILE ON,等等)。

MySQL用戶lea補助:

+-----------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+-----------------------------------------------------------------------------------------------------------+ 
| GRANT FILE ON *.* TO 'lea'@'localhost' IDENTIFIED BY PASSWORD '*9BB439A3A652A9DAD3718215F77A7AA06108A267' | 
| GRANT ALL PRIVILEGES ON `database`.* TO 'lea'@'localhost'         | 
+-----------------------------------------------------------------------------------------------------------+ 

回答

2

這可以通過MySQL的用戶權限引起。

如這裏指出https://dba.stackexchange.com/questions/17029/cannot-output-mysql-data-to-file

給自己FILE權限,請執行下列操作:

  1. service mysql restart --skip-networking --skip-grant-tables
  2. mysql <hit enter>
  3. UPDATE mysql.user SET File_priv = 'Y' WHERE user='lea' AND host='localhost';
  4. exit
  5. service mysql restart

linux用戶可以寫一個文件。但是mysql服務可能會被apparmor阻塞。

選擇如下文件:/etc/apparmor.d/usr.sbin.mysqld

有添加項目文件夾:

/usr/sbin/mysqld { 
    [...] 
    /home/datam/xfers/online/ r, 
    /home/datam/xfers/online/* rw 
    [...] 
} 

最後,做一個

sudo /etc/init.d/apparmor reload 
+0

用戶確實有該文件的權限,但。正如我的問題所述:'使用/ tmp /文件。csv的作品,所以我相當有信心這不是一個MySQL的權限問題' – tubaguy50035

+0

你試過嗎? 「由INTO OUTFILE或INTO DUMPFILE創建的任何文件都可由服務器主機上的所有用戶寫入,其原因是MySQL服務器無法創建一個文件,該文件由正在運行其帳戶的用戶以外的任何人所擁有。由於這個原因和其他原因,您不應該以root身份運行mysqld。)因此,該文件必須是世界可寫的,以便您可以操作它的內容。「 –

+0

讓一個擁有文件權限的mysql用戶不同於嘗試使用'mysql'操作系統帳戶寫入文件 –