PostgreSQL中授权administrator角色后test_user无法创建用户
问题原因与解决方案
为什么test_user无法继承CREATEROLE权限?
PostgreSQL中,角色的**特殊属性(如CREATEROLE、SUPERUSER、CREATEDB等)是角色自身的固有属性,无法通过角色继承传递给成员用户。只有角色被授予的对象权限(比如对表、视图的读写权限)**才能被成员用户继承。
从\du的输出可以看到,administrator的CREATEROLE是它自身的属性,并非通过权限授予获得,因此test_user作为它的成员,无法自动继承这个属性来创建用户。
解决方法
有两种可行的处理方式:
- 直接给test_user添加CREATEROLE属性
执行以下SQL语句,直接为test_user赋予创建角色的权限:
ALTER USER test_user CREATEROLE;
操作完成后,test_user即可直接创建用户,无需依赖administrator角色。
- 临时切换到administrator角色执行操作
如果不想修改test_user的属性,可以在需要创建用户时,临时切换到administrator角色:
SET ROLE administrator; CREATE USER new_test_user; -- 替换为实际需要创建的用户名 RESET ROLE;
这种方式仅临时使用administrator的权限,操作完成后会恢复test_user的原有权限状态。
内容的提问来源于stack exchange,提问作者Paincake-
相关产品推荐
相关产品推荐

