我们有一个现有的postgres数据库gsrdb与超级用户 gsr一起生产。我们一直在使用该用户gsr进行数据库维护。另外,我们的app服务使用相同的用户gsr在数据库上进行事务处理。
我们现在就想改变这一切。我们需要一个单独的超级用户gsr_admin(其凭据由Vault管理),它可以进行dba维护,但我们的应用服务仍然使用现有的用户gsr。
我面临的问题是,到目前为止,所有的数据库对象都是由gsr用户拥有的,如果我以用户gsr_admin的身份在数据库w.r.t上运行更新的话。无论是表约束还是序列,它都会失败,比如error: must be owner of relation...blah blah
我怎么才能解决这个问题?
因此,我在想,如果我能够创建一个超级用户管理组角色,名为admin_group,并将所有数据库对象的所有所有权从用户gsr重新分配给它,然后将用户gsr和gsr_admin都更改为属于这个管理组角色。那样的话,到目前为止创建的所有东西都不是属于角色admin_group的吗?我是否以用户gsr或gsr_admin的身份创建新对象,它们中的任何一个仍然可以更新对象?
我可能错了。会非常感谢你的投入。
发布于 2020-02-21 07:10:03
简单地跑
ALTER ROLE gsr NOSUPERUSER;
ALTER ROLE gsr RENAME TO gsr_admin; -- needs a new password now
CREATE ROLE gsr LOGIN;
GRANT USAGE ON SCHEMA myschema TO gsr;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA myschema TO gsr;同样,对序列和其他必需的特权授予USAGE。您可能也希望为未来的对象运行一些ALTER DEFAULT PRIVILEGES。
https://stackoverflow.com/questions/60330243
复制相似问题