Postgresql权限不断失败

Posted

技术标签:

【中文标题】Postgresql权限不断失败【英文标题】:Postgresql permissions keep failing 【发布时间】:2014-08-07 20:59:16 【问题描述】:

我在 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;

这解决了 data_scientist 使用过去表格的问题。对于我添加的未来表格

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

不过,无论何时添加新表,其他 data_scientist 对新表的权限都会失败。

【问题讨论】:

***.com/questions/10352695/… 似乎通过指定 DEFAULT PRIVILEGES 来指定对架构中创建的新对象的访问权限来回答这个问题 事实上这是我添加的第二部分。还是不行。 @mc110 记住 FOR 也很重要,因为默认权限是针对每个用户/角色的,并且默认授予发出该语句的当前用户。 @mlt 我不确定我理解你对 FOR 的意思,你能举例说明吗? 如果您在发出 alter 语句时连接到数据库时具有角色data_scientist,那么您必须使用 for data_scientist 角色,否则默认权限将应用于仅由您用于发出 alter 语句的用户创建的新表。 This 也可能是相关的。如果 data_scientist 在创建表之前作为组角色,请确保使用 set role。我相信这个 Q 是我链接的那个的副本。 【参考方案1】:

默认情况下,ALTER DEFAULT PRIVILEGES 仅适用于运行命令的角色。假设我们有 2 个用户:ramfjord 和 animalito。如果我(ramfjord)运行

ALTER DEFAULT PRIVILEGES GRANT SELECT ON TABLES TO public; CREATE TABLE ramfjord_table; 

然后animalito将能够看到它。如果animalito运行

CREATE TABLE animalito_table

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

因此,我们在我的公司已经停止使用默认权限,并开始使用明确的 GRANT。要删除默认权限,您必须运行

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

所有者、架构、关系类型和权限必须与\ddp 中列出的相匹配,此命令才能执行任何操作。 不要从存储默认权限的内部表中删除所有内容...相信我。

【讨论】:

以上是关于Postgresql权限不断失败的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQ 连接问题 FATAL: no pg_hba.conf entry for host

Postgresq9.6主从部署

PostgreSQL 服务器启动失败,无法创建锁定文件:权限被拒绝

postgresql 安装

Pacemaker+Corosync搭建PostgreSQL集群

PostgreSQL备机checkpoint