PG数据恢复must be member of role “xxxx“

文章讲述了如何在PostgreSQL中处理包含drop语句的数据库备份,由于表和索引删除需模式所有者权限,test_username2作为用户需要成为test_schema的owner。通过一系列SQL操作,包括查看角色关系、修改模式所有者和撤销权限,解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        背景:有一份数据库备份文件,sql语句中包含了drop语句。postgresql数据中有一个模式:test_schema,owner是test_schema_onwer。有另外一个用户test_username2。test_username2具有test_schema的所有权限。

        test_username2才是操作test_schema的用户。

        现在使用test_username2登录,并执行恢复备份语句。然后出现了must be member of role "xxxx"。

        原因:只有模式的owner才能删除表和创建索引。

        解决办法:将test_schema的owner权限从test_schema_onwer改为test_username2。

实现:

先使用test_schema_onwer登录数据库:

-- 查看用户关系
postgres=> \du
                                      List of roles
    Role name    |                         Attributes                         | Member of 
-----------------+------------------------------------------------------------+-----------
 coremanage      | Create role                                                | {}
 coremanagetest1 |                                                            | {}
 postgres        | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

-- 查看所有模式的owner
postgres=> \dn
       List of schemas
      Name      |   Owner    
----------------+------------
 core_manage_db | postgres
 public         | postgres
 test_schema    | coremanage
(3 rows)

-- 将 coremanagetest1  加入到 coremanage      
postgres=> grant coremanage to coremanagetest1 ;
GRANT ROLE
postgres=> \du
                                        List of roles
    Role name    |                     Attributes                         |  Member of   
-----------------+--------------------------------------------------------+--------------
 coremanage      | Create role                                            | {}
 coremanagetest1 |                                                        | {coremanage}
 postgres        | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

-- 切换coremanagetest1 登录

postgres=> \c postgres coremanagetest1;
You are now connected to database "postgres" as user "coremanagetest1".
-- 修改owner
postgres=> alter schema test_schema owner to coremanagetest1; 
ALTER SCHEMA

-- 查看权限

postgres=> \dn
         List of schemas
      Name      |      Owner      
----------------+-----------------
 core_manage_db | postgres
 public         | postgres
 test_schema    | coremanagetest1
(3 rows)

这样就可以修改过来了

如果这时候需要收回coremanage的coremanagetest1权限。只需要在切换到coremanage登录然后执行:

revoke coremanage from coremanagetest1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值