You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 10:非超级用户能否为其他用户创建数据库并指定所有者?

解决PostgreSQL非超级用户指定数据库所有者的权限问题

问题核心

你需要让非超级用户starter具备创建数据库、用户,并将用户指定为对应数据库所有者的权限,但当前执行CREATE DATABASE newdatabase OWNER test;时触发报错:ERROR: must be member of role "test"。

原因分析

PostgreSQL的权限规则中,只有超级用户,或者拥有目标角色的ADMIN权限/是目标角色的成员,才能将数据库的所有权指定给该角色。你的starter用户虽有CREATEDB和CREATEROLE权限,但默认没有对test角色的管理权限,因此无法完成操作。

解决方案

根据test角色是否由starter创建,分两种情况处理:

情况1:test由starter创建

让starter在创建test角色时,给自己赋予对该角色的管理权限,执行以下SQL:

CREATE ROLE test LOGIN WITH ENCRYPTED PASSWORD 'test_password' WITH ADMIN OPTION;

加上WITH ADMIN OPTION后,starter作为test的管理员,即可正常执行CREATE DATABASE newdatabase OWNER test;。

情况2:test是已存在的角色

需要超级用户执行以下SQL,给starter授予对test角色的管理权限:

GRANT test TO starter WITH ADMIN OPTION;

执行后,starter就具备了将数据库所有权指定给test的权限。

权限边界说明

  • 上述配置不会让starter获得超级用户权限,依然无法删除他人创建的数据库(默认非超级用户仅能删除自己拥有的数据库)。
  • 之前执行的REVOKE语句已经限制了starter对public schema下表的操作权限,无需调整。

内容的提问来源于stack exchange,提问作者Alberto B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:45:36