El comando LOAD DATA
puede cargar un fichero
que esté localizado en el equipo servidor, o puede cargar un
fichero localizado en el equipo cliente cuando se especifica la
palabra clave LOCAL
.
Hay dos aspectos de seguridad potenciales al soportar la
versión LOCAL
de los comandos LOAD
DATA
:
La transferencia del fichero desde el equipo cliente al
equipo servidor se inicia mediante el servidor MySQL. En
teoría, puede construirse un servidor modificado de forma
que le diga al programa cliente que transfiera un fichero
elegido por el servidor en lugar de el fichero especificado
por el cliente en el comando LOAD DATA
.
Tal servidor podría acceder a cualquier fichero en el
equipo cliente al que el usuario cliente tuviese acceso de
lectura.
En un entorno Web en el que los clientes se conecten
mediante un servidor Web, un usuario podría usar
LOAD DATA LOCAL
para leer cualquier
fichero al que el servidor Web tuviese acceso de lectura
(asumiendo que el usuario puediese ejecutar cualquier
comando contra el servidor SQL). En este entorno, el cliente
respecto al servidor MySQL es el servidor Web, no el
programa ejectuado por el usuario para conectar al servidor
Web.
Para tratar estos problemas, hemos cambiado el funcionamiento de
LOAD DATA LOCAL
en MySQL 3.23.49 y MySQL
4.0.2 (4.0.13 en Windows):
Por defecto, todos los clientes MySQL y bibliotecas en
distribuciones binarias se compilan con la opción
--enable-local-infile
para ser compatible
con la versión MySQL 3.23.48 y anteriores.
Si compila MySQL de los ficheros fuentes pero no usa la
opción --enable-local-infile
para
configure, LOAD DATA
LOCAL
no puede usarse por ningún cliente a no ser
que se escriba explícitamente para invocar
mysql_options(... MYSQL_OPT_LOCAL_INFILE,
0)
. Consulte Sección 24.2.3.44, “mysql_options()
”.
Puede desactivar todos los comandos LOAD DATA
LOCAL
desde el lado del servidor arrancando
mysqld con la opción
--local-infile=0
.
Para el cliente de línea de comando
mysql, LOAD DATA LOCAL
puede activarse especificando la opción
--local-infile[=1]
, o deshabilitarse con
la opción --local-infile=0
. De forma
similar, para mysqlimport, las opciones
--local
o -L
permite
la carga de datos locales. En cualquier caso, el uso exitoso
de una operación de carga local requiere que el servidor lo
permita.
Si usa LOAD DATA LOCAL
en scripts de Perl
scripts u otros programsa que lean del grupo
[client]
en los ficheros de opciones,
puede añadir la opción local-infile=1
a
ese grupo. De todos modos, para evitar que esto cause
problemas en programas que no entiendan
local-infile
, especifíquelo usando el
prefijo loose-
:
[client] loose-local-infile=1
Si LOAD DATA LOCAL INFILE
está
desactivado, tanto en el servidor o el cliente, un cliente
que trate de ejecutar dicho comando recibe el siguiente
mensaje de error:
ERROR 1148: The used command is not allowed with this MySQL version
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.