postgresql - 我如何设置权限,以便所有开发人员都获得对任何其他开发人员创建的对象的所有特权?

标签 postgresql database-permissions

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

我认为实现此目的的方法是创建角色 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/

相关文章:

postgresql - PostgreSQL 中的模式权限被拒绝

database - 使用多个数据库和每个数据库一个模式更好,还是一个数据库有多个模式更好?

mysql - 如何返回连接所有存在 SQL 的行

node.js - 无法连接到 postgres

postgresql - 禁用角色不拥有的数据库上的所有操作(包括使用 psql -l 列出)?

mysql - 向其他用户授予执行功能权限

postgresql - 为什么 PostgreSQL 将用户和组合并到角色中?

sql - 使用 SELECT 语句查询自定义 postgresql 参数

sql - 如何在 PostgreSql 中从秒获取年、月、日?

交叉表查询中的 Postgresql WITH 子句