20.5. Sécurité des fonctions
Les fonctions, les triggers et les politiques de sécurité au
niveau ligne autorisent à l'intérieur du serveur les
utilisateurs à insérer du code que d'autres utilisateurs
peuvent exécuter sans en avoir l'intention. Par conséquent, ces
mécanismes permettent aux utilisateurs d'utiliser un
« cheval de
Troie » contre d'autres utilisateurs avec
une relative facilité. La protection la plus forte est un
contrôle strict sur qui peut définir des objets. Quand cela
n'est pas possible, écrivez les requêtes en se référant
seulement aux objets dont les propriétaires sont dignes de
confiance. Supprimez le schéma public du search_path ainsi que tout autre schéma
permettant à des utilisateurs non dignes de confiance de créer
des objets.
Les fonctions sont exécutées à l'intérieur du processus serveur
avec les droits au niveau système d'exploitation du démon
serveur de la base de données. Si le langage de programmation
utilisé par la fonction autorise les accès mémoire non
contrôlés, il est possible de modifier les structures de
données internes du serveur. Du coup, parmi d'autres choses, de
telles fonctions peuvent dépasser les contrôles d'accès au
système. Les langages de fonctions qui permettent un tel accès
sont considérées « sans confiance » et PostgreSQL™ autorise uniquement les
superutilisateurs à écrire des fonctions dans ces langages.