MySQL toma las siguientes medidas para evitar uso inadecuado de funciones definidas por el usuario.
Debe tener el privilegio INSERT
para poder
usar CREATE FUNCTION
y el privilegio
DELETE
para poder usar DROP
FUNCTION
. Esto es necesario ya que estos comandos
añaden y borran registros de la tabla
mysql.func
.
UDFs debe tener como mínimo un símbolo definido además del
símbolo xxx
que corresponde a la función
principal xxx()
. Estos símbolos
auxiliares se corresponden con las funciones
xxx_init()
,
xxx_deinit()
,
xxx_reset()
,
xxx_clear()
, y xxx_add()
. Desde MySQL 4.0.24, 4.1.10a, y 5.0.3,
mysqld soporta una opción
--allow-suspicious-udfs
que controla si UDFs
que tienen un solo símbolo xxx
pueden
cargarse. Por defecto, la opción está desactivada, para
evitar intentos de cargar funciones de ficheros de objetos
compartidos otros aparte de los que contienen UDFs legítimos.
Si tiene UDFs antiguos que contienen sólo el símbolo
xxx
y no pueden recompilarse para incluir
un símbolo auxiliar, puede ser necesario especificar la
opción --allow-suspicious-udfs
. De otro
modo, debe evitar activar esta capacidad.
Los ficheros objeto UDF no pueden guardarse en un directorio
arbitrario. Deben estar localizado en un directorio de sistema
en el que busque el lincador dinámico. Para forzar esta
restricción y evitar intentos de especificar rutas fuera de
los directorios buscados por el lincador dinámico, MySQL
chequea el fichero de objeto compartido especificado en
comandos CREATE FUNCTION
para delimitadores
de rutas. Desde MySQL 4.0.24, 4.1.10a, y 5.0.3, MySQL también
chequea los delimitadores de rutas en nombres de ficheros
almacenados en la tabla mysql.func
cuando
carga funciones. Esto evita intentos de especificar rutas
ilegítimas manipuladas en la tabla
mysql.func
. Para información acerca de
UDFs y lincador en tiempo de ejecución, consulte
Sección 27.2.3.5, “Compilar e instalar funciones definidas por el usuario”.
É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.