Las funciones y las reglas permiten a los usuarios insertar código en el servidor de la base de datos que otros usuarios pueden ejecutar sin saberlo. Ambos mecanismos permiten a los usuarios alojar caballos de troya con relativa impunidad. La única protección efectiva es un estrecho control sobre quien puede definir funciones (por ejemplo, escribir en tablas con campos SQL) y reglas. También se recomienda auditar seguimientos y alertas en pg_class, pg_user y pg_group.
Las funciones escritas en cualquier lenguaje excepto SQL se ejecutan por el servidor de la base de datos con el mismo permiso que el usuario postgres (el servidor de la base de datos funciona con el user-id de postgres. Es posible cambiar las estructuras de datos internas del servidor por los usuarios, desde dentro de funciones de confianza. Es por ello que este tipo de funciones pueden, entre otras cosas, evitar cualquier sistema de control de acceso. Este es un problema inherente a las funciones definidas por los usuarios en C.
Como en las funciones SQL, las reglas tambíen se ejecutan con la identidad y los permisos del usuario que llamó al servidor de la base de datos.
There are no plans to explicitly support encrypted data inside of Postgres (though there is nothing to prevent users from encrypting data within user-defined functions). There are no plans to explicitly support encrypted network connections, either, pending a total rewrite of the frontend/backend protocol.
User names, group names and associated system identifiers (e.g., the contents of pg_user.usesysid) are assumed to be unique throughout a database. Unpredictable results may occur if they are not.