是否可以使用 Postgresql 创建一个具有 2 个用户的数据库,这些用户充当数据库的所有者?
我可以创建一个组角色并将两个用户添加到该组,然后使该组成为数据库的所有者,但这要求两个用户都必须在每个连接上手动设置他们的角色,以使他们创建的任何表都可以访问另一个用户。有没有办法让组成为用户每次登录时的默认角色或任何其他方式来实现相同的目标?
是否可以使用 Postgresql 创建一个具有 2 个用户的数据库,这些用户充当数据库的所有者?
我可以创建一个组角色并将两个用户添加到该组,然后使该组成为数据库的所有者,但这要求两个用户都必须在每个连接上手动设置他们的角色,以使他们创建的任何表都可以访问另一个用户。有没有办法让组成为用户每次登录时的默认角色或任何其他方式来实现相同的目标?
不可以,每个数据库只能有一个所有者。如前所述,您可以拥有多个超级用户,或者您可以专门向随后继承的组角色授予权限。
您可能想查看http://blog.hagander.net/archives/70-Faking-the-dbo-role.html,了解一种伪造类似于您所要求的东西的方法。它并不完美,但对你来说可能已经足够了。它至少应该能够解决对象所有权问题。
啊,找到了: PostgreSQL Docs: Chapter 20. Database Roles and Privileges
“具有 INHERIT 属性的成员角色自动使用他们所属角色的权限。”
CREATE ROLE joe LOGIN INHERIT;
CREATE ROLE admin NOINHERIT;
GRANT admin TO joe;
“在以 joe 角色连接后,数据库会话将立即使用直接授予 joe 的权限以及授予 admin 的任何权限,因为 joe “继承”了 admin 的权限。”