2009-03-21 6 views
14

Ich versuche, die Ausgabe einer SQL-Abfrage in MySQL in eine Textdatei mit der folgenden Abfrage erfassen.Abfrage Ausgabe in eine Datei gibt Zugriff verweigert Fehler

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

Ich bekomme den folgenden Fehler.

ERROR 1045 (28000): Zugriff verweigert für Benutzer 'username' @ '%' (mit Passwort: JA)

Jede Idee, wo gehe ich falsch? Ist es ein Problem mit der Berechtigung?

+0

Was genau machst du? Geben Sie Befehle in die mysql-Clientkonsole oder in das Systemterminal ein? – Vasil

+0

nicht Programmierung bezogen – cletus

+0

Ich gebe Befehle über die MySQL-Konsole – Arnkrishn

Antwort

30

Outfile ist seine eigene Erlaubnis in mysql.

Wenn Sie ALLE haben, ist es enthalten.

Wenn Sie jedoch nur eine sichere Sammlung wie SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, aber nicht OUTFILE haben, funktioniert "in outfile" nicht in Abfragen. Der Grund dafür ist, dass der Zugriff auf Dateien innerhalb von MySQL, selbst für Schreibzwecke, gewisse Sicherheitsrisiken birgt, denn wenn Sie von mysql aus auf eine Datei zugreifen, können Sie auf alle Dateien zugreifen, auf die der mysql-Benutzer Zugriff hat. basierte Dateiberechtigungen.

Um dies zu umgehen, können Sie Ihre Abfrage direkt in die Ausgabe der Shell/Sprache ausführen, mit der Sie den SQL Server ausführen.

ist hier ein * nichts Beispiel

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

Aber tut es alle auf einer Linie ohne „\“ oder „\“ verwenden, um den Zeilenumbruch zu entkommen.

Was passiert hier ist, dass Sie eine Abfrage in den MySQL-Client ausführen und es spuckt das Ergebnis aus, dann leiten Sie die Ausgabe in eine Datei. Also wird die Datei niemals innerhalb von mysql aufgerufen, sondern nach dem Ausführen von mysql.

Also verwenden Sie mysql, um die Informationen zu erhalten und DANN die Daten in die Datei von Ihrer eigenen Benutzer-Shell abzulegen, und alles wird gut.

Oder finden Sie einen Weg, um sich die outfile mysql-Erlaubnis, so oder so.

+0

das ist großartig! vielen Dank – ajay

4

Wenn es Ihr System ist (Sie sind Administrator) und Sie wissen, wie Sie es sichern, aktivieren Sie diese Berechtigungen.

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
Verwandte Themen