21.6. Segurança de função #

Funções, gatilhos e políticas de segurança no nível de linha permitem que usuários insiram código no processo servidor que outros usuários podem executar involuntariamente. Portanto, estes mecanismos permitem que usuários desenvolvam Cavalos de Troia para outros usuários com relativa facilidade. A proteção mais forte é o controle rígido sobre quem pode definir objetos. Onde isto for inviável, deve-se escrever consultas referindo-se apenas a objetos com donos confiáveis. Deve ser removido de search_path quaisquer esquemas que permitam usuários não confiáveis ​​criarem objetos.

As funções são executadas no processo servidor do cliente com as permissões do sistema operacional do processo servidor (daemon) do banco de dados. Se a linguagem de programação utilizada para escrever a função permitir acessos à memória sem controle, é possível alterar as estruturas de dados internas do servidor. Portanto, entre muitas outras coisas, estas funções podem contornar qualquer controle de acesso ao sistema. As linguagens de programação que permitem este tipo de acesso são consideradas não confiáveis, e o PostgreSQL permite que apenas superusuários criem funções escritas nessas linguagens.