2011-05-22 19 views
54

¿Alguna idea?MYSQL en el archivo "acceso denegado" - pero mi usuario tiene "TODO" acceso .. y la carpeta es CHMOD 777

SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*' 
LINES TERMINATED BY '\n' 
FROM tbl_property 
WHERE managerGroupID = {$managerGroupID} 

error:

Access denied for user 'asdfsdf'@'localhost' (using password: YES) 
+1

"TODOS LOS PRIVILEGIOS" no incluye todos los privilegios. Pertinente a este caso, no incluye el privilegio 'FILE', que es necesario para las sentencias' SELECT INTO OUTFILE'.He tenido varios problemas con esta falta de coincidencia entre el inglés y el MySQL: http://dba.stackexchange.com/a/96894/53784 – WAF

Respuesta

87

intente ejecutar este comando SQL:

> grant all privileges 
    on YOUR_DATABASE.* 
    to 'asdfsdf'@'localhost' 
    identified by 'your_password'; 
> flush privileges; 

Parece que usted está teniendo problemas con la conexión a la base de datos y no escribir en la carpeta que está mencionando

Además, asegúrese de haber concedido FILE al usuario 'asdfsdf'@'localhost'.

> GRANT FILE ON *.* TO 'asdfsdf'@'localhost'; 
+0

Todo se ve bien con eso, incluso en el panel cpanel, TODO está marcado – Shackrock

+1

@Shackrock: echa un vistazo respuesta actualizada Asegúrate de haber otorgado 'FILE' al usuario. –

+37

Hay dos problemas aquí. 1) OTORGAR TODO no lo hace ARRENDAR ARCHIVO. 2) GRANT FILE solo funciona con \ *. \ * (Es decir, globalmente). Ambos son errores en MySQL. – fijiaaron

30

Sinceramente me molestó para hacer frente a las subvenciones y esto funcionó incluso sin los privilegios:

echo "select * from employee" | mysql --host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt 
+4

Esto se debe a que solo está haciendo un SELECT regular, no un SELECT INTO OUTFILE (un archivo .csv en este caso). – aqn

+3

Esta es una mala forma de hacerlo para tablas más grandes porque el cliente almacena el conjunto completo de resultados antes de colocar algo en el archivo. –

+3

Bueno para usar cuando no se pueden obtener derechos para el ARCHIVO – jminkler

12

Como dice @fijaaron,

  1. GRANT ALL no implica GRANT FILE
  2. GRANT FILE solo funciona con *.*

Lo mismo ocurre con

GRANT FILE ON *.* TO user; 
0

Desde CP/WHM le quitó la capacidad de modificar los privilegios de usuario root en phpMyAdmin, usted tiene que utilizar la línea de comandos para:

mysql> GRANT FILE ON *.* TO 'user'@'localhost'; 

la etapa 2 se para permitir que ese usuario descargue un archivo en una carpeta específica. Hay algunas maneras de hacer esto, pero me acabó poniendo una carpeta en:

/home/user/tmp/db 

y

chown mysql:mysql /home/user/tmp/db 

que permite al usuario mysql para escribir el archivo. Como han dicho los carteles anteriores, también puede usar la carpeta temporal MySQL, no creo que realmente importe, pero definitivamente no desea otorgarle el permiso 0777 (escritura mundial) a menos que desee que el mundo vea sus datos. Existe un problema potencial si desea enjuagar: repita el proceso ya que INTO OUTFILE no funcionará si el archivo existe. Si sus archivos son propiedad de un usuario diferente, simplemente intentar unlink($file) no funcionará. Si eres como yo (paranoicos 0777) entonces se puede establecer el directorio de destino mediante:

chmod($dir,0777) 

justo antes de hacer el comando de SQL, a continuación,

chmod($dir,0755) 

inmediatamente después, seguido de unlink(file) a eliminar el archivo. Esto mantiene todo funcionando bajo su usuario web y no es necesario invocar al usuario de mysql.

Cuestiones relacionadas