sql >> データベース >  >> RDS >> PostgreSQL

更新/削除を無効にし、トリガーがそれらを実行できるようにする方法はありますか?

    はい、これは可能です。

    トリガーはトリガー関数の特権で実行され、デフォルトはSECURITY INVOKER つまり、トリガー機能はcurrent_userの権限で効果的に実行されます。 、あなたの場合、行を挿入するもの。

    現在のユーザーがトリガー関数が操作するテーブルに必要な権限を持っていない場合、基になるテーブルの元の操作はエラーになります。

    ただし SECURITY DEFINERを使用できます トリガー関数がこの関数をOWNERの権限で実行するため 関数の。

    スーパーユーザーが自分の場合 トリガー関数、すべてを実行できます -これはセキュリティ上の問題となる可能性があります。 SECURITY DEFINERの記述に関するマニュアルの指示を考慮してください 安全に機能します。

    ただし、必要な権限だけでわかりやすい役割を作成する方が賢明ですOWNER トリガー機能の。ログインせずに「デーモン」ロールを作成して、そのような操作の特権バンドルとして機能させることもできます。次に、このデーモンの役割に必要な特権(スキーマ、テーブル、シーケンスなど)のみを付与します。より洗練された設計の場合は、特権を「グループロール」(ここでもログインなし)にバンドルし、これらのグループロールをそれを必要とするロール(この例ではデーモンロール)に付与して、効果的に「グループのメンバー」にする必要があります。私はそれをたくさんします。

    関数自体の特権に関するdba.SEのこの関連する回答を検討してください。

    • PostgreSQL 8.4でトリガー機能を実行するために必要な権限は何ですか?



    1. クラウドベンダーの詳細:AWSAurora上のPostgreSQL

    2. ClusterControlを使用してデータベースフェイルオーバーを自動化する方法

    3. Oracle ForUserSecurityでのプロファイルの作成

    4. PostgreSQLでのpg_sleep_for()のしくみ