我们有一个现有的postgres数据库gsrdb
与超级用户gsr
一起生产。我们一直在和那个用户gsr
一起做所有的数据库维护。此外,我们的应用程序服务使用同一用户gsr
在数据库上执行事务。
我们现在想改变这一点。我们想要一个单独的超级用户gsr_admin
(其凭据由Vault管理(,它可以进行dba维护,但我们的应用程序服务仍使用现有用户gsr
。
我面临的问题是,到目前为止,所有的数据库对象都归gsr
用户所有,如果我以用户gsr_admin
的身份在数据库上运行更新,无论是表约束还是序列,它都无法说出error: must be owner of relation...blah blah
我该怎么解决这个问题?
因此,我在考虑是否可以创建一个名为admin_group
的超级用户管理组角色,并将所有数据库对象的所有所有权从用户gsr
重新分配给它,然后将用户gsr
和gsr_admin
都更改为属于该管理组角色。这样,到目前为止创建的所有内容都将归角色admin_group
所有吗?我是以用户gsr
还是以gsr_admin
的身份创建新对象,它们中的任何一个仍然可以更新对象?
我可能错了。非常感谢您的意见。
只需运行
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
。