es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Exportando resultados de SQL, teniendo problemas con los permisos.

Estoy teniendo problemas de permisos con mariadb al exportar un resultado sql.

select * from referalList
INTO OUTFILE '/home/joe/testOutFileReferalList.csv';

Error SQL [1] [HY000]: (conn=63) No se puede crear/escribir en el archivo '/home/joe/testOutFileReferalList.csv' (Errcode: 13 "Permiso denegado")

Estoy usando DBeaver como frente. Pero obtengo el mismo resultado con la CLI sin embargo me conecte con:

sudo mysql -u root -p
sudo mysql -u joe -p
mariadb -u joe -p
etc.

con o sin sudo…

Entonces, sin una ruta, la ejecución de sql pone el archivo en /var/lib/mysql/referals/ (referals es el nombre de mi db).

select * from referalList
INTO OUTFILE 'testOutFileReferalList.csv';

Se crea con permisos de mysql:mysql.
Tengo que cambiar los permisos en cada resultado SQL que exporto. ¿Cómo puedo hacer para que los permisos sean míos, es decir, joe:joe? ¿Y cómo puedo exportar archivos a cualquier lugar que desee, como mi directorio de inicio ~?

Además, ¿hay alguna manera de hacer que mariadb sobrescriba un archivo si ya existe?

La versión de mariadb es:
Versión del servidor: 10.6.5-MariaDB-1:10.6.5+maria~focal distribución binaria de mariadb.org
Estoy en Linux Ubuntu 20.04.4

Gracias,

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en MySQL y permisos de usuario, puedo sugerir las siguientes soluciones para los problemas de permisos que se encuentran al exportar resultados de SQL en MariaDB:

    1. Cambie la propiedad y los permisos del directorio donde se guardará el archivo exportado:
      sudo chown joe:joe /home/joe/
      sudo chmod 755 /home/joe/
      

      Esto permitirá al usuario joe escribir en el directorio /home/joe/. Puede reemplazar /home/joe/ por cualquier otro directorio donde desee exportar el archivo.

    2. Conceda permisos de archivo al usuario joe en el servidor de MariaDB:

      GRANT FILE ON *.* TO 'joe'@'localhost';

      Esto concederá el privilegio FILE al usuario joe en el servidor de MariaDB, permitiéndole escribir archivos en el sistema de archivos del servidor. Reemplace ‘localhost’ con el nombre de host o la dirección IP de su servidor de MariaDB.

    3. Use la opción IF NOT EXISTS para sobrescribir el archivo si ya existe:

      select * from referalList
      INTO OUTFILE '/home/joe/testOutFileReferalList.csv'
      CHARACTER SET utf8mb4
      FIELDS TERMINATED BY ',' 
      ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
      IF NOT EXISTS;
      

      Esto sobrescribirá el archivo existente si ya existe.

    Espero que estas soluciones le ayuden a resolver sus problemas de permisos.

Comments are closed.