Моя программа, работающая в Ubuntu 18.04, выполняет оператор выбрать в выходной файл в моем каталоге /home/tmp, но все файлы, созданные mysql, заблокированы. Я могу разблокировать их вручную, но наша программа должна прочитать файл сразу после их создания, поэтому мне нужно, чтобы они были разблокированы при создании.

Я уже установил права доступа к папке 777, но все же все вновь созданные файлы заблокированы. Файлы принадлежат серверу mysql и не имеют прав доступа для «Других» пользователей. Я не могу изменить эти разрешения, так как они мне не принадлежат.

Работающий сервер mysql - v8.0.18

В файле my.cnf я установил для secure_file_priv путь к этой папке /home/tmp.

У нас есть та же программа, работающая с сервером mysql 5.7.27 на другом компьютере, и файлы там не заблокированы, поэтому я не уверен, в чем проблема.

Пожалуйста помоги! Спасибо.

РЕДАКТИРОВАТЬ: уточнения

  • под «заблокированным» я имею в виду, что файл имеет символ замка на значке при просмотре его в файлах.
  • сообщение об ошибке, которое я получаю при попытке открыть файл, гласит: «Отказано в доступе к «/home/tmp/filename».
  • мой оператор select выглядит примерно так: «SELECT * INTO OUTFILE '/home/tmp/file.csv' FIELDS TERMINATED BY ',' FELIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM device "
1
user385123 6 Дек 2019 в 01:15

1 ответ

Лучший ответ

Вы столкнулись с этим примечанием из документации MySQL (см. https://dev.mysql.com/doc/refman/8.0/en/select-into.html):

Начиная с MySQL 8.0.17, umask для создания файла равен 0640; у вас должны быть достаточные права доступа для управления содержимым файла. До версии MySQL 8.0.17 umask был равен 0666, и файл был доступен для записи всем пользователям на хосте сервера.

Таким образом, файлы доступны для чтения только той группе, в которой работает MySQL. Вы можете добавить своего пользователя в эту группу, но это может дать доступ, выходящий за рамки желаемого (например, прямой доступ к файлам данных базы данных).

Другой вариант, если ваша файловая система поддерживает списки ACL (большинство поддерживает), — посмотреть, будет ли ACL по умолчанию переопределять разрешения, которые устанавливает MySQL, попробуйте что-то вроде этого (в каталоге, в который записываются дампы):

sudo setfacl -m 'd:u:«YOUR-USER»:r' /home/tmp

Это устанавливает ACL «по умолчанию» для автоматического добавления ACL к любым файлам, созданным в /home/tmp, позволяя «ВАШЕМУ ПОЛЬЗОВАТЕЛЮ» читать их. Если вам также нужно написать им, вы должны использовать вместо этого rw.

1
derobert 6 Дек 2019 в 01:23