はい、これは可能です。
トリガーはトリガー関数の特権で実行され、デフォルトはSECURITY INVOKER
つまり、トリガー機能はcurrent_user
の権限で効果的に実行されます。 、あなたの場合、行を挿入するもの。
現在のユーザーがトリガー関数が操作するテーブルに必要な権限を持っていない場合、基になるテーブルの元の操作はエラーになります。
ただし 、 SECURITY DEFINER
を使用できます トリガー関数がこの関数をOWNER
の権限で実行するため 関数の。
スーパーユーザーが自分の場合 トリガー関数、すべてを実行できます -これはセキュリティ上の問題となる可能性があります。 SECURITY DEFINER
の記述に関するマニュアルの指示を考慮してください 安全に機能します。
ただし、必要な権限だけでわかりやすい役割を作成する方が賢明ですOWNER
トリガー機能の。ログインせずに「デーモン」ロールを作成して、そのような操作の特権バンドルとして機能させることもできます。次に、このデーモンの役割に必要な特権(スキーマ、テーブル、シーケンスなど)のみを付与します。より洗練された設計の場合は、特権を「グループロール」(ここでもログインなし)にバンドルし、これらのグループロールをそれを必要とするロール(この例ではデーモンロール)に付与して、効果的に「グループのメンバー」にする必要があります。私はそれをたくさんします。
関数自体の特権に関するdba.SEのこの関連する回答を検討してください。
- PostgreSQL 8.4でトリガー機能を実行するために必要な権限は何ですか?