26

DELETEsセキュリティに配慮した設計のため、特定のテーブルを無効にしたいと考えています。

は、行にフラグをDELETE設定するだけですdeleted(アプリケーション層で使用されるビューに表示されます)。

私が理解しているように、ルールは追加のクエリを生成するため、ルールは元のクエリを抑制することができませんでした。

トリガー付きのおもちゃの例(まだテストされていません):

-- data in this table should be 'undeletable'
CREATE table article (
    id serial,
    content text not null,
    deleted boolean default false
)

-- some view that would only show articles, that are NOT deleted
...

-- toy trigger (not tested)
CREATE OR REPLACE FUNCTION suppress_article_delete()
RETURNS TRIGGER AS $sad$
BEGIN
    IF (TG_OP = 'DELETE') THEN
        UPDATE article SELECT id, content, TRUE;
        -- NEW or NULL??
        RETURN NEW;
    END IF;
    RETURN NULL;
END;
$sad$ LANGUAGE plpgsql;

を抑制する良い方法は何でしょうDELETEか?

4

1 に答える 1

35

私が理解しているように、ルールは追加のクエリを生成するため、ルールは元のクエリを抑制することができませんでした。

そうではありません-それはINSTEADルールかもしれません:

 CREATE RULE shoe_del_protect AS ON DELETE TO shoe DO INSTEAD NOTHING;

(マニュアルの同じページの例)。

別の方法はREVOKE、問題のテーブルに対する特権を削除し、削除するためのストアド プロシージャを作成することです...また、おそらく更新と挿入も行います。

于 2012-07-02T18:11:32.863 に答える