在pg中刪除帳號時,通常不能直接刪除帳號,要先將該帳號上全部的對應權限收回,但每每這一步是比較繁瑣的,可能當時賦權的對象類型不少,對象也比較多,雖然能夠經過sql按照類型來收回針對整個schema的全部權限,但仍是有可能漏掉的,可能有使用ALTER DEFAULT PRIVILEGES
定義的默認權限。sql
實際上pg提供了對應的命令來處理刪除用戶,碰到的權限回收問題。post
能夠結合REASSIGN OWNED BY old_user TO other_user;
和DROP OWNED BY ole_user;
來實現。code
REASSIGN OWNED BY old_user TO other_user;
對象
語句是將old_user擁有owner權限的對象轉移給other_user,那麼old_user將不會再擁有owner權限的對象了。class
DROP OWNED BY ole_user;
權限
語句是在當前庫中,刪除用戶擁有的對象;並收回在當前庫賦予的任何權限。查詢
因爲以前已經使用了REASSIGN OWNED BY
,old_user用戶下已無owned的對象,對於帳號不僅是存在owner的狀況,可能用戶只是查詢或修改的權限,此時再使用DROP OWNED BY
則能夠將其餘權限收回。co
最後刪除帳號。block
REASSIGN OWNED BY old_user TO postgres; DROP OWNED BY ole_user; DROP USER old_user;
REASSIGN OWNED BY
中能夠將對象的擁有者修改成postgres或是其餘較高權限的業務帳號。
注意:
REASSIGN OWNED BY
和DROP OWNED BY
命令只能刪除對應庫中的權限,若是在其餘庫中仍有要收回的權限,要切換到其餘庫執行。