我希望所有开发人员都能使用彼此的代码。当一个人创建表格时,其他人应该能够直接查询它,而无需授予权限。
我认为实现此目标的方法是创建一个角色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;
我的期望是,如上所述设置这些默认特权意味着,将在公共架构中将此类对象的每个新实例分配给属于该角色成员的每个人。
但是,即使这样做了(以我的个人用户帐户登录,该帐户也是role_developer
的成员),我发现在创建新表后,我的同事无法SELECT
。
因此,显然我缺少了一些东西。我是pgsql的新手,尽管我是一位经验丰富的SQL Server开发人员,这显然使我的观点蒙上了阴影。
答案 0 :(得分:1)
您显示的ALTER DEFAULT PRIVILEGES
语句仅影响运行这些语句的用户创建的表。
您必须运行
ALTER DEFAULT PRIVILEGES FOR ROLE someuser ....
针对所有可能创建此类对象的用户。
这很烦人,它仍然不允许其他用户删除或更改我创建的表,因为这仅限于表所有者。
创建这样的角色可能是一个更好的设置:
CREATE ROLE object_owner NOINHERIT;
并将该角色授予所有用户。
然后,每当有人要创建,更改或删除对象时,他们首先都必须这样做
SET ROLE object_owner;
然后,您只需要为该角色运行一组ALTER DEFAULT PRIVILEGES
命令即可。
您可以通过仅将模式上的CREATE
授予object_owner
来强制执行此操作。