pg删除帐号,权限的回收问题

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

相关文章
相关标签/搜索