21.6. Seguridad de las funciones #

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.