関数やトリガや行セキュリティポリシーによって、ユーザは他のユーザが意識しないで実行できるようなコードを、バックエンドサーバに挿入することができます。
したがって、これらの機能によってユーザは比較的簡単に他のユーザにとって「トロイの木馬」となるものを実行することができます。
最も強力な保護は、誰がオブジェクトを定義できるかを厳格に管理することです。
それが実行不可能な場合は、信頼できる所有者を持つオブジェクトのみを参照するクエリを記述します。
search_path
から、パブリックスキーマや信頼できないユーザがオブジェクトを作成できるスキーマを削除します。
関数は、データベースサーバデーモンのオペレーティングシステム権限で、バックエンドサーバプロセスの中で実行されます。 プログラミング言語で関数に未検査のメモリアクセスを許可している場合、サーバの内部データ構造を変更することが可能です。 したがって、その他の多数のことの中でも、そのような関数はどのようなシステムアクセスコントロールも回避することができます。 このようなアクセスを許可する関数言語は「信頼されない」ものとみなされ、PostgreSQLはこれらの言語による関数の作成をスーパーユーザのみに限定して許可しています。