Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 39. PL/Perl - Langage de proc�dures Perl | Avance rapide | Suivant |
Normalement, PL/Perl est install� en tant que langage de programmation de <<�confiance�>>, de nom plperl. Durant cette installation, certaines commandes Perl sont d�sactiv�es pour pr�server la s�curit�. En g�n�ral, les commandes qui interagissent avec l'environnement sont restreintes. Cela inclut les commandes sur les descripteurs de fichiers, require et use (pour les modules externes). Il n'est pas possible d'acc�der aux fonctions et variables internes du processus du serveur de base de donn�es ou d'obtenir un acc�s au niveau du syst�me d'exploitation avec les droits du processus serveur, tel qu'une fonction C peut le faire. Ainsi, n'importe quel utilisateur sans droits sur la base de donn�es est autoris� � utiliser ce langage.
Voici l'exemple d'une fonction qui ne fonctionnera pas car les commandes syst�me ne sont pas autoris�es pour des raisons de s�curit� :
CREATE FUNCTION badfunc() RETURNS integer AS ' open(TEMP, ">/tmp/mauvaisfichier"); print TEMP "Je t'ai eu !\n"; return 1; ' LANGUAGE plperl;
La cr�ation de cette fonction va r�ussir, mais pas son ex�cution.
Il est parfois souhaitable d'�crire des fonctions Perl qui ne sont pas restreintes. Par exemple, on peut souhaiter vouloir envoyer des courriers �lectroniques. Pour supporter ce cas de figure, PL/Perl peut aussi �tre install� comme un langage <<�douteux�>> (habituellement nomm� PL/PerlU ). Dans ce cas, la totalit� du langage Perl est accessible. Si la commande createlang est utilis�e pour installer le langage, le nom du langage plperlu s�lectionnera la version douteuse de PL/Perl.
Les auteurs des fonctions PL/PerlU doivent faire attention au fait que celles-ci ne puissent �tre utilis�es pour faire quelque chose de non d�sir� car cela donnera la possibilit� d'agir comme si l'on poss�dait les privil�ges d'administrateur de la base de donn�es. Il est � noter que le syst�me de base de donn�es ne permet qu'aux super-utilisateurs de cr�er des fonctions dans un langage douteux.
Si la fonction ci-dessus a �t� cr��e par un super-utilisateur en utilisant le langage plperlu, l'ex�cution de celle-ci r�ussira.
Note�: Pour des raisons de s�curit�, afin de stopper une faille dans les op�rations n�cessitant des droits de PL/PerlU dans PL/Perl, ces deux langages doivent �tre ex�cut�s dans des instances s�par�s de l'interpr�teur Perl. Si votre installation Perl a �t� compil� correctement, ce n'est pas un probl�me. N�anmoins, toutes les installations ne sont pas compil�es avec les drapeaux n�cessaires. Si PostgreSQL d�tecte que c'est le cas, il ne lancera pas un deuxi�me interpr�teur mais renverra une erreur. En cons�quence, pour ce type d'installation, vous ne pouvez pas utiliser � la fois PL/PerlU et PL/Perl dans le m�me processus serveur. Le rem�de est d'installer un interpr�teur Perl compil� avec les bons drapeaux, � savoir soit usemultiplicity soit usethreads et useithreads. Pour plus de d�tails, consultez la page de manuel de perlembed.
Pr�c�dent | Sommaire | Suivant |
Acc�s � la base de donn�es depuis PL/Perl | Niveau sup�rieur | Fonctionnalit�s absentes |