首页 > 解决方案 > 如何将管理员用户添加到现有的 postgres 数据库?

问题描述

我们有一个现有的 postgres 数据库gsrdb在生产中使用superuser gsr。我们一直在与该用户进行所有数据库维护gsrgsr此外,我们的应用服务使用同一用户在数据库上执行事务。

我们现在想改变这一点。我们需要一个单独的超级用户gsr_admin(其凭据由 Vault 管理),它可以进行 dba 维护,但仍然让我们的应用服务使用现有用户gsr

我面临的问题是,到目前为止,所有数据库对象都归gsr用户所有,如果我以用户身份gsr_admin在数据库上运行更新,无论是表约束还是序列,它都会失败说error: must be owner of relation...blah blah

我怎样才能解决这个问题?

所以我在想我是否可以创建一个名为的超级用户管理组角色admin_group并将所有数据库对象的所有所有权从用户重新分配给它gsr,然后更改两个用户gsrgsr_admin属于这个管理组角色。这样一来,到目前为止创建的所有内容都将归角色所有admin_group吗?我是否以用户gsr身份创建新对象,gsr_admin或者他们中的任何一个仍然可以更新对象?

我可能错了。真的很感激一些投入。

标签: postgresqlpostgresql-11

解决方案


只需运行

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为将来的对象运行一些。


推荐阅读