Intento insertar algunas líneas del archivo csv a la base de datos MySQL "elevage" por línea de comando. El archivo se llama "animal.csv". A continuación se muestra mi solicitud:
`mysql> LOAD DATA LOCAL INFILE 'F:/MYSQL/animal.csv' -> INTO TABLE Animal -> FIELDS TERMINATED BY ';' ENCLOSED BY '"' -> LINES TERMINATED BY '\r\n' -> (espece, sexe, date_naissance, nom, commentaires);
y me encuentro con este mensaje de error
`ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides`.
Entonces he usado el siguiente código:
`SHOW GLOBAL VARIABLES LIKE 'local_infile'`;
y encontré: local_file estaba "APAGADO". Luego traté de configurarlo en "ON" usando el siguiente código:
`SET GLOBAL local_infile=1;`
Desafortunadamente, me encuentro con otro mensaje de error:
`ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation`
Aunque, cuando reviso las subvenciones del usuario "estudiante" en el que estoy trabajando:
mysql> SHOW GRANTS FOR CURRENT_USER();
Yo obtengo:
+--------------------------------------------------------------+ | Grants for student@localhost | +--------------------------------------------------------------+ | GRANT USAGE ON *.* TO `student`@`localhost` | | GRANT ALL PRIVILEGES ON `elevage`.* TO `student`@`localhost` | +--------------------------------------------------------------+ 2 rows in set (0.00 sec)
lo que significa que "estudiante" tiene todos los privilegios en la base de datos "elevage".
Por favor aconséjame.
El privilegio SYSTEM_VARIABLES_ADMIN
(así como el privilegio SUPER
obsoleto) no es un privilegio por base de datos, sino un privilegio por servidor. Y es un privilegio de los administradores, no un privilegio de los usuarios.
¿Por qué necesita tales privilegios para usar LOAD DATA
? Porque ese comando requiere que su usuario escriba archivos directamente en el espacio de archivos de la máquina del servidor de la base de datos. Por lo tanto, el servidor de la base de datos debe confiar completamente en los usuarios de ese comando.
Para usar LOAD DATA LOCAL
, necesitará que un administrador del servidor le otorgue esos privilegios, con algo como esto:
GRANT SUPER, SYSTEM_VARIABLES_ADMIN ON *.* TO 'student'@'localhost';
Si se trata de un servidor compartido, parece poco probable que su administrador le conceda este privilegio. Si es su propio servidor, usted es el administrador y puede usar su cuenta raíz para otorgar el privilegio a su cuenta de estudiante, o usar la cuenta raíz directamente para ejecutar su comando LOAD DATA
.