はい、可能です。
トリガーは、トリガー機能の特権で実行されます。デフォルトはSECURITY INVOKER
です。つまり、トリガー機能は、current_user
の特権で有効に実行されます。
現在のユーザーに、トリガー機能が動作するテーブルに必要な権限がない場合は、元のテーブルの元の操作がエラーになります。
ただし、あなたは、機能のOWNER
の権限で実行し、この機能を持たせるトリガー機能のためSECURITY DEFINER
を使用することができます。潜在的なセキュリティ上の危険になります -
スーパーユーザー自身にトリガ機能を持っている場合、それはすべてを行うことができます。マニュアル内の指示を約Writing SECURITY DEFINER
Functions Safelyと考えてください。
しかし、トリガー機能の必要な特権OWNER
だけでプレーンな役割を果たすことが賢明です。このような操作のための特権バンドルとして動作する、ログインせずに "デーモン"ロールを作成することさえできます。このデーモンの役割に必要な権限(スキーマ、表、順序など)のみを付与します。より洗練された設計のためには、特権を "グループロール"(再びログインなし)にバンドルし、必要なロール(この例ではデーモンロール)にこれらのグループロールを付与し、効果的にグループのメンバーにする必要があります。私はそれをたくさんしています。
また、機能自体の特権についてはthis related question on dba.SEと考えてください。
トリガーが挿入されている行を更新する場合は、それは誤ったデザインの兆候です。トリガーの一部として表示したり、教えてください。彼らとは何をしていますか? –
挿入されたレコードの '特定のフィールドを更新する '必要がある場合 - あなたは' NEW.specific_field'に必要な値を割り当てることができます。別の更新は必要ありません。 –
私はそれをデザインしていませんでしたが、私が正直で何か良いことをしたのかどうかはわかりません。私はまだトリガーを見ていない。たぶん私はこれを使うことができた、私は知らない。知らせます。おかげで – Paco