Вывод запроса в файл выдает ошибку "отказано в доступе"

StackOverflow https://stackoverflow.com/questions/668618

Вопрос

Я пытаюсь записать выходные данные SQL-запроса в MySQL в текстовый файл, используя следующий запрос.

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt';

Я получаю следующую ошибку.

ОШИБКА 1045 (28000):Доступ запрещен для пользователя 'username'@'%' (с использованием пароля:ДА)

Есть какие-нибудь идеи, где я ошибаюсь?Это какая-то проблема, связанная с разрешением?

Это было полезно?

Решение

Outfile - это его собственное разрешение в mysql.

Если у вас есть ВСЕ, что входит в комплект.

Но если у вас просто есть безопасная коллекция, такая как SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, но не OUTFILE, "в outfile" не будет работать в запросах.

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

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

Вот пример *nix

>$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt

Но делайте все это в одной строке без "\" или используйте "\", чтобы избежать разрыва строки.

Что здесь происходит, так это то, что вы запускаете запрос в клиент mysql, и он выдает результат, затем вы направляете выходные данные в файл.Таким образом, файл никогда не вызывается из mysql, он вызывается после запуска mysql.

Поэтому используйте mysql для получения информации, а затем сбросьте данные в файл из вашей собственной пользовательской оболочки, и все будет в порядке.

Или найдите способ получить себе разрешение outfile mysql, в любом случае.

Другие советы

Если это ваша система (вы администратор), и вы знаете, как ее защитить, вот как вы включаете эти разрешения.

USE mysql;
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user';
FLUSH PRIVILEGES;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top