Functions, triggers and row-level security policies allow users to insert
code into the backend server that other users might execute
unintentionally. Hence, these mechanisms permit users to “Trojan
horse” others with relative ease. The strongest protection is tight
control over who can define objects. Where that is infeasible, write
queries referring only to objects having trusted owners. Remove
from search_path
the public schema and any other schemas
that permit untrusted users to create objects.
함수는 데이터베이스 서버 데몬의 운영 체제 권한이 있는 백엔드 서버 프로세스 내에서 실행된다. 함수에 사용된 프로그래밍 언어가 미검사 메모리 액세스를 허용하는 경우 서버의 내부 데이터 구조를 변경하는 것이 가능하다. 따라서 해당 함수는 모든 시스템 액세스 제어를 피해갈 수 있다. 해당 액세스를 허용하는 함수 언어는 “신뢰되지 않음”으로 간주되고, PostgreSQL는 수퍼유저만 해당 언어로 작성된 함수를 생성하도록 허용한다.