格兰特都在一个数据库中的特定架构PostgreSQL里的一组角色格兰特都在一个数据库中的特定架构Po

2019-05-13 16:14发布

使用PostgreSQL 9.0,我有所谓的“工作人员”的一组角色,并希望给予所有(或某些)的权限这个角色上表中的特定模式。 以下工作的无

GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;

的“工作人员”的成员仍然无法选择或更新架构中的“富”或(在第二个命令的情况下)各个表,以数据库中的任何表,除非我授予所有对特定表。

我能做些什么让我和我的用户的生活更轻松?

更新:想通了的帮助下上serverfault.com类似的问题 。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;

Answer 1:

你找到了速记设置权限在给定模式中的所有现有表。 该手册澄清 :

(但请注意, ALL TABLES被认为包括意见外国表 )。

大胆重点煤矿。 serial列与实施nextval()上的序列作为列默认和, 引述手册 :

比如,这个权限允许使用的currvalnextval功能。

因此,如果有serial的列,你还需要授予USAGE (或ALL PRIVILEGES序列

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

注: 标识列在Postgres的10或更高版本使用,不需要额外的特权隐含序列。 (考虑升级serial列。)

什么新的对象?

你也有兴趣在DEFAULT PRIVILEGES的用户或模式 :

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

这为在自动未来创建的对象的权限 - 而不是预先存在的对象。

缺省权限应用于由目标用户(创建的对象FOR ROLE my_creating_role )。 如果该子句被省略,则默认为当前用户执行ALTER DEFAULT PRIVILEGES 。 要明确:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

还要注意的pgAdmin III的所有版本的SQL窗格中有个微妙的问题,并显示默认的权限,即使他们并不适用于当前的角色。 一定要调整FOR ROLE复制SQL脚本时手动条款。



Answer 2:

我的答案是类似这一项上ServerFault.com 。

保守

如果你想比授予“所有权限”比较保守的,你可能想尝试一些更喜欢这些。

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;

使用的public那里指的是为每一个新的数据库/目录下创建的默认架构的名称。 如果你创建的模式有自己的名称替换。

访问模式

在所有访问模式,对于任何操作,用户必须被授予“使用”的权利。 之前用户可以选择,插入,更新或删除,用户必须首先被授予“使用”的模式。

首先使用Postgres的时候,你不会注意到这个要求。 默认情况下,每个数据库都有一个名为第一个架构public 。 ,默认为每用户已自动被授予“使用”权到特定的模式。 当添加额外的模式,那么你必须明确授予的使用权。

GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;

从摘录的Postgres文档 :

对于模式,允许访问包含在指定模式(假设该对象的所有权要求也达到了)对象。 本质上,这使得架构中被授予者“仰望”的对象。 如果没有此权限,仍然可以看到该对象的名称,例如,通过查询系统表。 此外,撤销该权限之后,现有的后端可能有以前执行该语句查找,所以这不是阻止对象访问一个完全安全的方式。

欲了解更多的讨论,参见问题, 究竟什么GRANT USAGE ON SCHEMA? 。 要特别注意的答案被Postgres的专家克雷格·林格 。

对战未来现有对象

这些命令只会影响现有对象。 您在未来创建表和这样获得缺省权限,直到你重新执行上面的那些行。 见对方的回答由欧文Brandstetter修改更改默认值,从而影响未来的对象。



文章来源: Grant all on a specific schema in the db to a group role in PostgreSQL