MySQL prend les mesures suivantes pour éviter une utilisation abusive des fonctions utilisateurs.
Vous devez avoir les droits de INSERT
pour
être capable d'utiliser la commande CREATE
FUNCTION
et le droit de DELETE
pour être capable d'effacer une fonction (DROP
FUNCTION
. Ceci est nécessaire car ces commandes
ajoutent et suppriment des lignes dans la table
mysql.func
.
UDF doit avoir au moins un symbole défini, en plus du symbole
xxx
qui correspond à la fonction
principale xxx()
. Ces symboles auxiliaires
correspondent aux fonctions xxx_init()
,
xxx_deinit()
,
xxx_reset()
, xxx_clear()
et xxx_add()
. Depuis MySQL 4.0.24, 4.1.10a
et 5.0.3, mysqld supporte l'option
--allow-suspicious-udfs
qui spécifie si les
UDF qui n'ont qu'une fonction xxx
peuvent
être chargées. Par défaut, cette fonction est désactivée,
ce qui empêche les fonctions de charger des fonctions depuis
des objets partagés autres que les UDF légales. Si vous avez
de vieilles fonctions UDF qui contiennent uniquement le
symbole xxx
qui ne peuvent pas être
recompilées pour utiliser un symbole auxiliaire, il sera
nécessaire d'utiliser l'option
--allow-suspicious-udfs
. Sinon, vous devrez
vous passer de cette fonctionnalité.
Les fichiers d'objet UDF ne peuvent pas être placés dans
n'importe quel dossier. Ils doivent être placés dans un
dossier système que le compilateur dynamique peut analyser.
Pour assurer le fonctionnement de cette restriction, et
éviter les attaques par spécification de chemins arbitraires
en dehors de ceux que le compilateur dynamique peut atteindre,
MySQL vérifie dans le nom de l'objet partagé spécifié dans
la commande CREATE FUNCTION
la présence de
délimiteurs de dossiers. Depuis MySQL 4.0.24, 4.1.10a et
5.0.3, MySQL vérifie aussi les délimiteurs de fichiers
stockés dans la table mysql.func
lorsque
vous chargez les fonctions. Cela évite les tentatives de
spécifications de chemins interdits, en manipulant
directement les tables mysql.func
. Pour
plus de détails sur les UDF et le compilateur dynamique,
voyez Section 27.2.3.5, « Compiler et installer des fonctions utilisateurs ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.