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.