天天看點

PostgreSQL 10.1 手冊_部分 III. 伺服器管理_第 21 章 資料庫角色_21.4. 删除角色

21.4. 删除角色

由于角色可以擁有資料庫對象并且能持有通路其他對象的特權,删除一個角色 常常并非一次

DROP ROLE

就能解決。任何被該使用者所擁有 的對象必須首先被删除或者轉移給其他擁有者,并且任何已被授予給該角色的 權限必須被收回。

對象的擁有關系可以使用

ALTER

指令一次轉移出去,例如:

ALTER TABLE bobs_table OWNER TO alice;      

此外,

REASSIGN OWNED

指令可以被用來把要被删除的 角色所擁有的所有對象的擁有關系轉移給另一個角色。由于 

REASSIGN OWNED

不能通路其他資料庫中的對象,有必要 在每一個包含該角色所擁有對象的資料庫中運作該指令(注意第一個這樣的 

REASSIGN OWNED

将更改任何在資料庫間共享的該角色擁 有的對象的擁有關系,即資料庫或者表空間)。

一旦任何有價值的對象已經被轉移給新的擁有者,任何由被删除角色擁有的剩餘對象 就可以用

DROP OWNED

指令删除。再次,由于這個指令不能 通路其他資料庫中的對象, 有必要在每一個包含該角色所擁有對象的資料庫中運作 該指令。還有,

DROP OWNED

将不會删除整個資料庫或者表空間, 是以如果該角色擁有任何還沒有被轉移給新擁有者的資料庫或者表空間,有必要手工 删除它們。

DROP OWNED

也會注意移除為不屬于目标角色的對象授予給目标 角色的任何特權。因為

REASSIGN OWNED

不會觸碰這類對象,通 常有必要運作

REASSIGN OWNED

和 

DROP OWNED

(按照這個順序!)以完全地移除要被删除對象的 從屬物。

總之,移除曾經擁有過對象的角色的方法是:

REASSIGN OWNED BY doomed_role TO successor_role;
DROP OWNED BY doomed_role;
-- 在集簇中的每一個資料庫中重複上述指令
DROP ROLE doomed_role;      

如果不是所有的擁有對象都被轉移給了同一個後繼擁有者,最好手工處理異常 然後執行上述步驟直到結束。

如果在依賴對象還存在時嘗試了

DROP ROLE

,它将發出 消息辨別哪些對象需要被重新授予或者删除。

本文轉自PostgreSQL中文社群,原文連結: