web-dev-qa-db-ja.com

テーブルの所有者以外がテーブルのトリガーを無効にすることを許可できますか?

テーブルの所有者ではない1人のユーザーに対して、トリガーをオフおよびオンにする権限を付与します。できますか?

5

テーブルの所有者として、次のように選択したトリガーを無効にする関数(または、Postgres 11以降を使用している場合は procedure )を作成できます。

CREATE OR REPLACE FUNCTION disable_this_trigger() 
RETURNS void 
LANGUAGE SQL 
AS $$
ALTER TABLE something DISABLE TRIGGER this_trigger;
$$ SECURITY DEFINER;

次に、関数を実行するために必要な特権をユーザーに付与します。

GRANT EXECUTE ON FUNCTION disable_this_trigger() TO alice;

これでaliceはその1つのトリガーを無効にできるようになります。この機能をスイッチ(たとえば、オン/オフ)で拡張して有効化を可能にするか、またはこの機能とは逆の機能を作成することができます。

トリックはSECURITY DEFINER。関数を定義(作成)するユーザーの特権で関数を実行します。上記のように、テーブル(およびスーパーユーザー)のみがそのテーブルのトリガーを無効にできるため、これはテーブルの所有者でなければなりません。

7
dezso