由於角色可以擁有資料庫物件,並且可以擁有存取其他物件的權限,因此刪除角色通常不僅僅是一個快速的 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; -- repeat the above commands in each database of the cluster DROP ROLE doomed_role;
當並非所有擁有的物件都要轉移給同一個後繼擁有者時,最好手動處理例外情況,然後執行上述步驟進行清理。
如果在仍然存在相依物件的情況下嘗試 DROP ROLE
,它將發出訊息,識別哪些物件需要重新分配或刪除。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用 此表單 報告文件問題。