PostgreSQL 刪除角色

2021-08-31 15:21 更新

由于角色可以擁有數(shù)據(jù)庫對象并且能持有訪問其他對象的特權(quán),刪除一個角色 常常并非一次DROP ROLE就能解決。任何被該用戶所擁有 的對象必須首先被刪除或者轉(zhuǎn)移給其他擁有者,并且任何已被授予給該角色的 權(quán)限必須被收回。

對象的擁有關(guān)系可以使用ALTER命令一次轉(zhuǎn)移出去,例如:

ALTER TABLE bobs_table OWNER TO alice;

此外,REASSIGN OWNED命令可以被用來把要被刪除的 角色所擁有的所有對象的擁有關(guān)系轉(zhuǎn)移給另一個角色。由于 REASSIGN OWNED不能訪問其他數(shù)據(jù)庫中的對象,有必要 在每一個包含該角色所擁有對象的數(shù)據(jù)庫中運(yùn)行該命令(注意第一個這樣的 REASSIGN OWNED將更改任何在數(shù)據(jù)庫間共享的該角色擁 有的對象的擁有關(guān)系,即數(shù)據(jù)庫或者表空間)。

一旦任何有價值的對象已經(jīng)被轉(zhuǎn)移給新的擁有者,任何由被刪除角色擁有的剩余對象 就可以用DROP OWNED命令刪除。再次,由于這個命令不能 訪問其他數(shù)據(jù)庫中的對象, 有必要在每一個包含該角色所擁有對象的數(shù)據(jù)庫中運(yùn)行 該命令。還有,DROP OWNED將不會刪除整個數(shù)據(jù)庫或者表空間, 因此如果該角色擁有任何還沒有被轉(zhuǎn)移給新?lián)碛姓叩臄?shù)據(jù)庫或者表空間,有必要手工 刪除它們。

DROP OWNED也會注意移除為不屬于目標(biāo)角色的對象授予給目標(biāo) 角色的任何特權(quán)。因?yàn)?code class="command">REASSIGN OWNED不會觸碰這類對象,通 常有必要運(yùn)行REASSIGN OWNEDDROP OWNED(按照這個順序?。┮酝耆匾瞥粍h除對象的 從屬物。

總之,移除曾經(jīng)擁有過對象的角色的方法是:

REASSIGN OWNED BY doomed_role TO successor_role;
DROP OWNED BY doomed_role;
-- 在集簇中的每一個數(shù)據(jù)庫中重復(fù)上述命令
DROP ROLE doomed_role;

如果不是所有的擁有對象都被轉(zhuǎn)移給了同一個后繼擁有者,最好手工處理異常 然后執(zhí)行上述步驟直到結(jié)束。

如果在依賴對象還存在時嘗試了DROP ROLE,它將發(fā)出 消息標(biāo)識哪些對象需要被重新授予或者刪除。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號