2009-03-21 13 views
14

Estoy tratando de capturar el resultado de una consulta SQL en MySQL, a un archivo de texto con la siguiente consulta.Query salida a un archivo da acceso denegado error

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

Recibo el siguiente error.

ERROR 1045 (28000): Acceso denegado para el usuario 'nombre de usuario' @ '%' (using password: SÍ)

Cualquier idea, donde estoy haciendo mal? ¿Es algún problema relacionado con permisos?

+0

¿Qué estás haciendo exactamente? ¿Estás escribiendo comandos en la consola del cliente mysql o en la terminal del sistema? – Vasil

+0

no relacionado con la programación – cletus

+0

Estoy escribiendo comandos a través de la consola MySQL – Arnkrishn

Respuesta

30

Outfile es su propio permiso en mysql.

Si tiene TODO está incluido.

Pero si solo tiene una colección segura como SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, pero no OUTFILE, "en el archivo" no funcionará en las consultas.

La razón de esto es que acceder a archivos desde MySQL, incluso con fines de escritura, presenta ciertos riesgos de seguridad, porque si accede a un archivo de mysql puede acceder a cualquier archivo al que el usuario mysql tenga acceso. permisos de archivos basados

Para solucionar esto, puede ejecutar su consulta directamente en la salida de cualquier shell/idioma que esté utilizando para ejecutar el sql.

Aquí está un ejemplo * nix

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

Pero lo hacen todo en una línea sin el "\" o utilice el "\" para escapar del salto de línea.

Lo que está sucediendo aquí es que está ejecutando una consulta en el cliente mysql y está escupiendo el resultado, y luego está dirigiendo la salida a un archivo. Entonces el archivo nunca se llama desde mysql, se llama después de que mysql se ejecute.

Así que use mysql para obtener la información y, a continuación, volcar los datos en el archivo desde su propio shell de usuario y estará bien.

O encuentre la forma de obtener el permiso mysql de archivo externo, de cualquier manera.

+0

¡Esto es genial! muchas gracias – ajay

4

Si es su sistema (usted es el administrador), y sabe cómo protegerlo, así es como habilita esos permisos.

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
Cuestiones relacionadas