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 y el equipo servidor se inicia mediante el servidor MySQL. En teoría, muy bienpuede 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 luego 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
No hay comentarios:
Publicar un comentario