MYSQL в выходной файл "доступ запрещен" - но мой пользователь имеет доступ "ВСЕ" .. и папка CHMOD 777 - PullRequest
67 голосов
/ 23 мая 2011

Есть идеи?

SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property 
WHERE managerGroupID = {$managerGroupID}

Ошибка:

Access denied for user 'asdfsdf'@'localhost' (using password: YES)

Ответы [ 4 ]

108 голосов
/ 23 мая 2011

Попробуйте выполнить эту команду SQL:

> grant all privileges 
  on YOUR_DATABASE.* 
  to 'asdfsdf'@'localhost' 
  identified by 'your_password';
> flush privileges; 

Похоже, у вас возникли проблемы с подключением к базе данных, а не с записью в папку, о которой вы упоминаете.

Кроме того, сделайтеуверен, что вы предоставили FILE пользователю 'asdfsdf'@'localhost'.

> GRANT FILE ON *.* TO 'asdfsdf'@'localhost';
42 голосов
/ 07 июня 2013

Честно говоря, я не удосужился разобраться с грантами, и это работало даже без привилегий:

echo "select * from employee" | mysql --host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt
17 голосов
/ 10 октября 2016

Как говорит @fijaaron,

  1. GRANT ALL не означает GRANT FILE
  2. GRANT FILE работает только с *.*

Так же

GRANT FILE ON *.* TO user;
4 голосов
/ 08 сентября 2017

Поскольку cP / WHM лишил возможности изменять привилегии пользователя как root в PHPMyAdmin, вы должны использовать командную строку для:

mysql>  GRANT FILE ON *.* TO 'user'@'localhost';

Шаг 2 - разрешить этому пользователю выгружать файл в определенную папку. Есть несколько способов сделать это, но я положил папку:

/home/user/tmp/db

и

chown mysql:mysql /home/user/tmp/db

Это позволяет пользователю mysql записать файл. Как говорилось в предыдущих постерах, вы можете также использовать временную папку MySQL, я не думаю, что это действительно имеет значение, но вы определенно не хотите делать это с разрешением 0777 (доступным для записи), если вы не хотите, чтобы мир видел ваши данные. Существует потенциальная проблема, если вы хотите промыть-повторить процесс, так как INTO OUTFILE не будет работать, если файл существует. Если ваши файлы принадлежат другому пользователю, то попытка unlink($file) не сработает. Если вы похожи на меня (параноик 0777), тогда вы можете установить целевой каталог с помощью:

chmod($dir,0777)

непосредственно перед выполнением команды SQL, затем

chmod($dir,0755)

сразу после, затем unlink(file) для удаления файла. Все это работает под вашим веб-пользователем, и вам не нужно вызывать пользователя mysql.

...