我希望所有开发人员都能够使用彼此的代码。当一个人创建一张表时,其他人应该能够直接查询它而无需授予权限。
我认为实现此目的的方法是创建角色 role_developers
,让所有开发人员成为该角色的成员,然后执行此操作:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO role_developer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO role_developer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO role_developer;
我的期望是,如上设置这些默认权限意味着公共(public)架构中此类对象的每个新实例都将这些权限分配给属于该角色的每个成员。
然而,即使在这样做之后(以我的个人用户帐户登录,它也是 role_developer
的成员),我发现在我创建一个新表后,我的同事们'无法从中SELECT
。
很明显我遗漏了一些东西。尽管我是一位经验丰富的 SQL Server 开发人员,但我是 pgsql 的新手,这显然让我的观点蒙上了阴影。
最佳答案
您显示的 ALTER DEFAULT PRIVILEGES
语句只会影响运行这些语句的用户创建的表。
你必须跑
ALTER DEFAULT PRIVILEGES FOR ROLE someuser ....
对于所有可能创建此类对象的用户。
这很烦人,它仍然不允许其他用户删除或更改我创建的表,因为这仅限于表所有者。
创建这样的角色可能是一个更好的设置:
CREATE ROLE object_owner NOINHERIT;
并将该角色授予您的所有用户。
然后每当有人想要创建、更改或删除对象时,他们首先必须做
SET ROLE object_owner;
然后您只需为该角色运行一组 ALTER DEFAULT PRIVILEGES
命令。
您可以通过仅将架构上的 CREATE
授予 object_owner
来强制执行此操作。
关于postgresql - 我如何设置权限,以便所有开发人员都获得对任何其他开发人员创建的对象的所有特权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53877045/