在pg中刪除賬號時,一般不能直接刪除賬號,要先將該賬號上所有的對應權限收回,但往往這一步是比較繁瑣的,可能當時賦權的對象類型很多,對象也比較多,雖然可以通過sql按照類型來收回針對整個schema的所有權限,但還是有可能漏掉的,可能有使用ALTER DEFAULT PRIVILEGES
定義的默認權限。
實際上pg提供了對應的命令來處理刪除用戶,碰到的權限回收問題。
可以結合REASSIGN OWNED BY old_user TO other_user;
和DROP OWNED BY ole_user;
來實現。
REASSIGN OWNED BY old_user TO other_user;
語句是將old_user擁有owner權限的對象轉移給other_user,那么old_user將不會再擁有owner權限的對象了。
DROP OWNED BY ole_user;
語句是在當前庫中,刪除用戶擁有的對象;並收回在當前庫賦予的任何權限。
由於之前已經使用了REASSIGN OWNED BY
,old_user用戶下已無owned的對象,對於賬號不只是存在owner的情況,可能用戶只是查詢或修改的權限,此時再使用DROP OWNED BY
則可以將其他權限收回。
最后刪除賬號。
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
命令只能刪除對應庫中的權限,如果在其他庫中仍有要收回的權限,要切換到其他庫執行。