2009-03-21 13 views
14

Sto cercando di acquisire l'output di una query SQL in MySQL, in un file di testo utilizzando la seguente query.L'output di query su un file fornisce un errore di accesso negato

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

Ho ricevuto il seguente errore.

ERROR 1045 (28000): Accesso negato per l'utente 'username' @ '%' (usando la password: YES)

Qualsiasi idea, dove sto andando male? È un problema legato ai permessi?

+0

Che cosa stai facendo esattamente? Stai scrivendo i comandi nella console del client mysql o nel terminale di sistema? – Vasil

+0

non programmazione correlata – cletus

+0

Sto scrivendo i comandi attraverso la console MySQL – Arnkrishn

risposta

30

Outfile è la propria autorizzazione in mysql.

Se hai TUTTO è incluso.

Ma se si dispone di una raccolta sicura come SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, ma non OUTFILE, "in outfile" non funzionerà nelle query.

La ragione di ciò è che l'accesso ai file da MySQL, anche a scopo di scrittura, presenta alcuni rischi per la sicurezza, perché se si accede a un file da autorizzazioni di file basate.

Per aggirare questo problema, è possibile eseguire la query direttamente nell'output di qualsiasi shell/lingua che si sta utilizzando per eseguire sql con.

Ecco un esempio * nix

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

ma farlo tutto su una riga senza la "\" oppure utilizzare la "\" per sfuggire l'interruzione di riga.

Quello che sta succedendo qui è che stai eseguendo una query nel client mysql e sta sputando il risultato, quindi stai indirizzando l'output su un file. Quindi il file non viene mai chiamato da mysql, viene chiamato dopo mysql runs.

Quindi utilizzare mysql per ottenere le informazioni e quindi scaricare i dati nel file dalla propria shell utente e andrà tutto bene.

Oppure trovare un modo per ottenere il permesso MySQL di outfile, in entrambi i casi.

+0

questo è fantastico! grazie mille – ajay

4

Se è il tuo sistema (sei amministratore) e sai come proteggerlo, questo è il modo in cui abiliti queste autorizzazioni.

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
Problemi correlati