Postgresql
PostgreSQL 使用者只刪除一些表
有沒有辦法讓 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)
.