在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
命令只能删除对应库中的权限,若是在其余库中仍有要收回的权限,要切换到其余库执行。