Solucionando problemas con secure-file-priv

Al iniciar un servidor de mysql, se pueden especificar las opciones del programa en el archivo de opciones o por terminal. Estas opciones están destinadas a desbloquear otras funciones de MySQL, cambiar variables o imponer restricciones.

Así es como se leen las opciones en el servidor MySQL:

  • mysqld lee las opciones de los grupos [mysqld] y [server]
  • mysqld_safe lee las opciones de los grupos [mysqld] , [server] , [mysqld_safe] y [safe_mysqld]
  • mysql.server lee las opciones de los grupos [mysqld] y [mysql.server] .

Se puede ver un breve resumen de las opciones admitidas por MySQL usando:

  $ mysqld - help 

Para ver la lista completa, con este comando:

  $ mysqld --verbose --help 

Una de esas variables del sistema que se pueden configurar al iniciar el servidor es mysqld_secure-file-priv

¿Qué es y que hace la variable mysqld_secure-file-priv ?

La variable secure_file_priv se usa para limitar el impacto de las operaciones de importación y exportación de datos. Ejemplo de las operaciones afectadas son las realizadas por las SELECT ... INTO OUTFILE LOAD DATA y SELECT ... INTO OUTFILE y la función LOAD_FILE() . Estas operaciones están permitidas solo para usuarios que tienen el privilegio de FILE .

Para ver la configuración actual en tiempo de ejecución, use se puede usar un SHOW VARIABLES; .

Accede por shell a MySQL como usuario root

$ mysql -u root -p

Ejecuta el siguiente comando

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set
Time: 0.023s

Aquí puedes ver el directorio donde esta configurado /var/lib/mysql-files/

Cambiando el directorio de la variable secure-file-priv

Este valor se puede cambiar en el archivo de opciones de MySQL en la sección [mysqld].

  sudo vim /etc/my.cnf 

Establecer la variable en la sección [mysqld]

[mysqld]
secure-file-priv=/mysqlfiles

Luego crea el directorio configurado

  sudo mkdir /mysqlfiles  sudo chown -R mysql:mysql /mysqlfiles/ 

Reinicia el servicio MySQL para que los cambios surtan efecto.

  sudo systemctl restart mysqld 

Vuelve a iniciar sesión para confirmar la nueva configuración

mysql> SHOW VARIABLES LIKE "secure_file_priv"; +------------------+--------------+ | Variable_name    | Value        | +------------------+--------------+ | secure_file_priv | /mysqlfiles/ | +------------------+--------------+ 1 row in set (0.00 sec) 

Vamos a probar para confirmar que podemos exportar a la ruta especificada.

mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 

Intentemos de nuevo escribiendo para corregir la ruta.

mysql> SELECT * FROM information_schema.processlist into outfile '/mysqlfiles/mysql_processes.txt'; Query OK, 1 row affected (0.00 sec)  

Deshabilitar la variable secure-file-priv

Para deshabilitarlo, establezca la variable en un valor NULO.

[mysqld]  
secure-file-priv = ""

Reiniciamos de nuevo mysqld

  sudo systemctl restart mysqld 

Confirmamos después de reiniciar el servicio

mysql> SHOW VARIABLES LIKE "secure_file_priv"; +------------------+-------+ | Variable_name    | Value | +------------------+-------+ | secure_file_priv |       | +------------------+-------+ 1 row in set (0.00 sec)  

Intenta guardar el contenido de QUERY en una ruta diferente

mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt'; Query OK, 1 row affected (0.00 sec) 

Con esto hemos aprendido a configurar la variable secure-file-priv para adaptarse al uso que queramos darle.

También te podría gustar...

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.