variable - the mysql server is running with the--secure-file-priv option so it cannot execute this statement
¿Cómo puedo tener archivos de escritura MySQL como un usuario diferente? (4)
Estoy trabajando con una consulta MySQL que escribe en un archivo de salida. Ejecuto esta consulta una vez cada día o dos y, por lo tanto, quiero poder eliminar el archivo de salida sin tener que recurrir a su o sudo. La única forma en que puedo pensar en hacer que eso suceda es tener el archivo de salida escrito como propiedad de alguien que no sea el usuario de mysql. es posible?
Editar: no estoy redireccionando la salida a un archivo, estoy usando la parte INTO OUTFILE de una consulta de selección para enviar a un archivo.
Si ayuda:
mysql --version mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2
Si tienes otro usuario ejecuta la consulta desde cron, creará el archivo como ese usuario.
El archivo de salida lo crea el proceso mysqld, no el proceso del cliente. Por lo tanto, el archivo de salida debe ser propiedad del uid y del gid del proceso mysqld.
Puede evitar tener que sudo para acceder al archivo si accede desde un proceso bajo un uid o gid que puede acceder al archivo. En otras palabras, si mysqld crea archivos propiedad de uid y gid "mysql" / "mysql", entonces agregue su propia cuenta al grupo "mysql". Entonces debería poder acceder al archivo, siempre que el modo de permiso del archivo incluya acceso grupal.
Editar:
Está borrando un archivo en / tmp, con un modo de permiso de directorio de rwxrwxrwt. El bit adhesivo (''t'') significa que puede eliminar archivos solo si su uid es el mismo que el propietario del archivo, independientemente de los permisos en el archivo o el directorio.
Si guarda su archivo de salida en otro directorio que no tiene el conjunto de bits adhesivos, debería poder eliminar el archivo normalmente.
Lea este extracto de la página man para sticky (8):
STICKY DIRECTORIES
Un directorio cuyo `bit adhesivo ''está configurado se convierte en un directorio de solo anexos o, más exactamente, en un directorio en el que la eliminación de archivos está restringida. Un archivo en un directorio fijo solo puede ser eliminado o renombrado por un usuario si el usuario tiene permiso de escritura para el directorio y el usuario es el propietario del archivo, el propietario del directorio o el superusuario. Esta característica se aplica de manera útil a directorios como / tmp, que deben poderse escribir públicamente, pero deben denegar a los usuarios la licencia para eliminar arbitrariamente o cambiar el nombre de los archivos de los demás.
No se usa la sintaxis "SELECCIONAR ... EN SALIDA", no.
Debe ejecutar la consulta (es decir, el cliente) como otro usuario y redirigir la salida. Por ejemplo, edite su crontab para ejecutar el siguiente comando siempre que lo desee:
mysql db_schema -e ''SELECT col,... FROM table'' > /tmp/outfile.txt
Eso creará /tmp/outfile.txt como el usuario a quien le ha agregado el comando crontab.
solamente lo hago
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
y añadir
/var/www/codeigniter/assets/download/* w,
y
sudo service mysql restart
Y eso es todo, puedo hacer fácilmente SELECT INTO OUTFILE
cualquier nombre de archivo