★PostgreSQLカンファレンス2021 11月12日開催/チケット販売中★
他のバージョンの文書 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

21.6. 関数のセキュリティ

関数やトリガや行セキュリティポリシーによって、ユーザは他のユーザが意識しないで実行できるようなコードを、バックエンドサーバに挿入することができます。 したがって、これらの機能によってユーザは比較的簡単に他のユーザにとってトロイの木馬となるものを実行することができます。 最も強力な保護は、誰がオブジェクトを定義できるかを厳格に管理することです。 それが実行不可能な場合は、信頼できる所有者を持つオブジェクトのみを参照するクエリを記述します。 search_pathから、パブリックスキーマや信頼できないユーザがオブジェクトを作成できるスキーマを削除します。

関数は、データベースサーバデーモンのオペレーティングシステム権限で、バックエンドサーバプロセスの中で実行されます。 プログラミング言語で関数に未検査のメモリアクセスを許可している場合、サーバの内部データ構造を変更することが可能です。 したがって、その他の多数のことの中でも、そのような関数はどのようなシステムアクセスコントロールも回避することができます。 このようなアクセスを許可する関数言語は信頼されないものとみなされ、PostgreSQLはこれらの言語による関数の作成をスーパーユーザのみに限定して許可しています。