2013-01-19 17 views
5

Sto cercando di capire il motivo per cui continuo a riscontrare problemi durante l'utilizzo del comando INTO OUTFILE.Errcode 13, SELECT INTO OUTFILE issue

Ho sempre trovato questo erroro:

ERROR 1 (HY000): Can't create/write to file '/var/www/p1.txt' (Errcode: 13) 


SELECT password FROM mysql.user WHERE user='root' INTO OUTFILE '/var/www/p1.txt'; 

informazioni utili:

  • applicazione web: DVWA (localhost) (per motivi di studio)

  • Server: Apache/2.2. 14 (Ubuntu) - PHP/5.3.2

  • Versione MySQL 5.1.63

  • Sistema operativo Linux Backtrack 5r3.

Sto eseguendo il comando come utente root. Inoltre, posso creare liberamente cartelle o file in/var/www/

Errcode 13 So che significa rifiuto negato, ma cosa devo fare per risolvere il problema?

Qualsiasi aiuto sarà molto apprezzato.

+0

Il file 'p1.txt' esiste già (non dovrebbe)? L'utente con cui il processo 'mysqld' ha il permesso di scrivere nella directory'/var/www'? – eggyal

risposta

4

chown/var/www per l'utente tenta di scrivere il file, o chmod 777/var/www

questo non è probabilmente un modo sicuro di farlo, come si potrebbe valutare l'ipotesi di file altrove

+0

Funziona bene ... so che per ragioni di sicurezza non dovrei farlo ... ma volevo solo testare un esempio di estrazione di dati MySQL..grazie molto .. – user1990170

+0

non funziona! : @ – Hasan

7

Anche se si è effettuato il login come root in MySQL, la scrittura del file verrà eseguita come utente che esegue il daemon MySQL effettivo.

In altre parole, è necessario verificare quale utente esegue mysqld e fornire l'autorizzazione di scrittura alla directory per quell'utente.

+0

Molto controintuitivo, ma questa è una risposta molto migliore rispetto a settare ciecamente 777 ovunque. Grazie! – miken32

5

è necessario modificare le autorizzazioni per l'utente mysqld. iniziare eseguendo il seguente comando sudo aa-status per verificare lo stato dell'utente e le directory autorizzate. se si desidera modificare le autorizzazioni, modificare /etc/apparmor.d/usr.sbin.mysqld e inserire le directory desiderate.

è necessario riavviare AppArmor sudo /etc/init.d/apparmor restart

+1

Questo è legittimo. Grazie per la pubblicazione! Per gli impazienti e/o coloro che vogliono eseguire un comando rapido, 'mysqldump -T' per esempio,' service apparmor teardown' lo spegnerà.Al termine, è possibile eseguire il servizio di avvio apparmor e ripristinare la vita normale. –

0

su CentOS la cosa SELinux sta giocando non-bello.

$ getenforce 
Enforcing 

$ setenforce 0 
Permissive 

Ora, questo è grezzo, ma ha lavorato per me (fino al riavvio, quindi si riaccende). Se questa misura temporanea funziona, devi cercare su google come configurare correttamente selinux.

+0

Grazie, anche questa è stata la causa del mio problema! –

Problemi correlati