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 una respuesta

This site uses Akismet to reduce spam. Learn how your comment data is processed.