【问题标题】:How do I set up permissions so that all developers get ALL PRIVILEGES to objects that any of the other developers create?如何设置权限,以便所有开发人员都获得其他开发人员创建的对象的所有权限?
【发布时间】:2018-12-21 15:56:32
【问题描述】:

我希望所有开发人员都能够使用彼此的代码。当一个人创建一张表时,其他人应该能够直接查询它而无需授予权限。

我认为实现这一点的方法是创建一个角色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 的成员),我发现在我创建新表后,我的同事无法@987654324 @来自它。

所以很明显我错过了一些东西。尽管我是一位经验丰富的 SQL Server 开发人员,但我是 pgsql 的新手,这显然影响了我的观点。

【问题讨论】:

  • 我会猜到你所做的是正确的,听到它不起作用我很惊讶。作为一种变通方法,每当大家创建一个新对象时,是否可以将其所有者分配给 role_developer? alter table my_new_table owner to role_Developer

标签: postgresql database-permissions


【解决方案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 来强制执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多