Postgresql

PostgreSQL 使用者只刪除一些表

  • September 5, 2015

有沒有辦法讓 PostgreSQL 使用者可以刪除除指定表之外的所有表?

我們需要使用者能夠刪除一些表,但不是全部。最好能夠使用像revoke這樣的東西,我們可以指定使用者不應該刪除哪些表。

由於您執行的是 9.3,因此您可能會使用事件觸發器來擷取標籤DROP TABLE並阻止某些使用者發生這種情況。

Denish Patel 在他的部落格文章中提供了一個範例,這裡是防止 Postgres 中的人為錯誤。搜尋字元串“Function to prevent single table drop”。這應該讓您有足夠的開始根據您的特定需求進行修改。

DROP TABLE不是一項GRANT權利,它僅由表所有者和超級使用者持有。

Kassandry 已經註意到事件觸發器是一種選擇。

另一種方法是創建一個包裝函式,例如my_drop_table(thetable regclass),並將其標記SECURITY DEFINER為所有表的所有者(或超級使用者,但我真的不建議這樣做)。該函式將檢查表是否是受保護的表之一,如果不是,則DROP TABLE通過EXECUTE format('DROP TABLE %I;', thetable).

引用自:https://dba.stackexchange.com/questions/114242