PostgreSQL权限持续失败

4

我正在Linux上运行PostgreSQL 9.3.2。

我有一个名为"data_scientist"的组角色,并且有权限访问一个特定的(已经填充好的)模式,如下所示:

grant usage on schema schemaname to data_scientist;

grant select, references, trigger
    on all tables in schema schemaname
    to data_scientist;

这解决了数据科学家使用过去表格的问题。对于未来的表格,我添加了

alter default privileges in schema schemaname
grant select, references on tables
   to data_scientist;

然而,每当添加新表时,其他数据科学家的权限在新表上失效。


似乎可以通过指定DEFAULT PRIVILEGES来授予对特定模式中的所有对象的访问权限,以将其授予PostgreSQL中的组角色。 - mc110
事实上,这是我添加的第二部分。然而,它仍然无法正常工作。 - animalito
@mc110 需要牢记 FOR,因为默认权限是针对用户/角色的,并且默认为发出语句的当前用户。 - mlt
@mlt,我不确定你在FOR方面的意思,请举个例子说明一下? - animalito
1
如果在连接到数据库时,您没有角色“data_scientist”并发出“alter”语句,则必须使用“for data_scientist”角色,否则默认权限将仅适用于您用于发出“alter”语句的用户创建的新表。这个也可能相关。也就是说,在创建表之前,请确保使用了“set role”作为组角色“data_scientist”。我认为这个问题是我链接的问题的重复。 - mlt
1个回答

1
默认情况下,ALTER DEFAULT PRIVILEGES仅适用于运行命令的角色。假设我们有2个用户:ramfjord和animalito。如果我(ramfjord)运行该命令,则只会影响我的权限。
ALTER DEFAULT PRIVILEGES GRANT SELECT ON TABLES TO public; CREATE TABLE ramfjord_table; 

动物小伙伴将能够看到它。如果动物小伙伴奔跑。
CREATE TABLE animalito_table

那么Ramfjord将无法看到它,因为Ramfjord的默认权限不适用。请使用\ddp查看默认权限及其所有者。

因此,我们在我的公司停止使用默认权限,并开始使用显式授权。要删除默认权限,您必须运行:

ALTER DEFAULT PRIVILEGES FOR ROLE <owner> REVOKE...

所有者、架构、关系类型和权限必须与 \ddp 中列出的相匹配,以使此命令起作用。请不要只是删除存储默认权限的内部表中的所有内容……相信我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接