pg删除账号,权限的回收问题
在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
命令只能删除对应库中的权限,如果在其他库中仍有要收回的权限,要切换到其他库执行。
posted on 2018-12-17 16:04 Still water run deep 阅读(2849) 评论(0) 编辑 收藏 举报