PostgreSQL下拥有所有者角色的用户无法执行DROP DATABASE问题
问题原因
你遇到的报错并非因为没有数据库删除权限,而是DROP DATABASE搭配WITH (FORCE)参数时,PostgreSQL需要先终止所有连接到目标库的后台进程,该操作需要额外的信号发送权限,仅持有数据库所有者权限不足以完成操作。
你当前配置缺失的是pg_signal_backend内置角色的授权:该角色是PostgreSQL默认预置的系统角色,成员可以向其他后端进程发送终止、取消类信号,刚好是FORCE参数执行强制断开会话的必备权限。
解决方案
方案1:保留FORCE参数(推荐)
直接给所有者角色mydb_role授予pg_signal_backend权限,继承该角色的两个用户会自动获得对应权限:
GRANT pg_signal_backend TO mydb_role;
也可以单独给指定用户授权:
GRANT pg_signal_backend TO mydb_user; GRANT pg_signal_backend TO mydb_user_clone;
授权完成后即可正常执行带FORCE参数的删库命令。
方案2:不使用FORCE参数
如果不需要强制断开会话,可以先手动终止所有连接到mydb的会话,再执行不带FORCE参数的删库命令,不需要额外授权:
DROP DATABASE mydb;
内容的提问来源于stack exchange,提问作者hassanbsalimi
相关产品推荐
相关产品推荐

