when secure priv permission outfile into executing error errcode change mysql mysql-error-1045 into-outfile

secure - MYSQL en outfile "acceso denegado", pero mi usuario tiene acceso "TODO"... y la carpeta es CHMOD 777



mysql-- secure file priv error (4)

¿Algunas ideas?

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)


Como cP / WHM eliminó la capacidad de modificar los privilegios del usuario como root en PHPMyAdmin, debe usar la línea de comandos para:

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

El paso 2 es permitir a ese usuario volcar un archivo en una carpeta específica. Hay algunas maneras de hacer esto, pero terminé poniendo una carpeta en:

/home/user/tmp/db

y

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

Eso permite al usuario de mysql escribir el archivo. Como han dicho los pósters anteriores, también puede usar la carpeta temporal de MySQL, no creo que realmente importe, pero definitivamente no quiere que tenga el permiso 0777 (de escritura mundial) a menos que quiera que el mundo vea sus datos. Existe un problema potencial si desea enjuagar y repetir el proceso, ya que INTO OUTFILE no funcionará si el archivo existe. Si sus archivos son propiedad de un usuario diferente, el simple hecho de intentar unlink($file) no funcionará. Si eres como yo (paranoico sobre 0777), puedes configurar tu directorio de destino usando:

chmod($dir,0777)

Justo antes de hacer el comando SQL, entonces

chmod($dir,0755)

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


Como dice @fijaaron,

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

Asi que

GRANT FILE ON *.* TO user;


Honestamente, no me molesté en lidiar con 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


Intenta ejecutar este comando SQL:

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

Parece que tienes problemas para conectarte a la base de datos y no escribir en la carpeta que estás mencionando.

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

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