Las funciones, los disparadores (triggers) y las políticas de seguridad a nivel de fila permiten
a los usuarios insertar código en el servidor backend que otros usuarios podrían ejecutar
involuntariamente. Por lo tanto, estos mecanismos permiten a los usuarios introducir un “caballo
de Troya” a otros con relativa facilidad. La protección más fuerte es un control estricto
sobre quién puede definir objetos. Cuando eso sea inviable, escribe consultas que hagan referencia
únicamente a objetos que tengan propietarios de confianza. Elimina de search_path
cualquier esquema que permita a usuarios no confiables crear objetos.
Las funciones se ejecutan dentro del proceso del servidor backend con los permisos del sistema operativo del demonio del servidor de la base de datos. Si el lenguaje de programación utilizado para la función permite accesos a la memoria no controlados, es posible cambiar las estructuras de datos internas del servidor. Por lo tanto, entre muchas otras cosas, tales funciones pueden eludir cualquier control de acceso del sistema. Los lenguajes de funciones que permiten dicho acceso se consideran “untrusted” (no confiables), y PostgreSQL permite únicamente a los superusuarios crear funciones escritas en esos lenguajes.