【问题标题】:very confused about permissions in postgres对 postgres 中的权限感到非常困惑
【发布时间】:2022-01-03 07:51:01
【问题描述】:

我有多个数据库,每个数据库都有多个架构。

我有一组连接到这些数据库的应用程序。每个应用都有自己的用户,根据其功能,应用可以:

  • 读取/写入特定数据库的所有模式和表,设置函数/通知
  • 只读特定数据库的所有模式和表

架构和表可以随时创建,因此需要使用 ALTER DEFAULT 设置权限。

我的理解是 ALTER DEFAULT 必须由将创建未来表的用户完成。对吗?

因为我可以有用户 1 可以 RO db A,但 RW db B,而用户 2 只能 RO db B 等的场景。使用角色在这里似乎没有任何帮助。

所以我有点困惑如何设置它。

然后是下一个并发症: 我可以将权限分配为 SELECT (RO) 或 SELECT、INSERT、UPDATE、DELETE (RW),但是:

  • 序列呢?我不希望 RW 用户能够更改序列,但他们需要能够使用它们
  • 那么它是如何与函数一起工作的呢? RW 用户需要能够设置/更新自己的功能

此设置的任何示例都将不胜感激,因为阅读文档对我没有多大帮助,而且关于 SO 的大多数问题/答案似乎非常相似,但并不完全相同,因此非常令人困惑 :)


编辑,按照 cmets 中“a_horse_with_no_name”的建议,我这样做了:

这是我的 init.sql:

CREATE DATABASE accounts;
CREATE DATABASE analysis;
CREATE DATABASE exchange;

GRANT CONNECT ON DATABASE exchange    TO capture, analyzer, sunny, viewer;
GRANT CONNECT ON DATABASE analysis    TO analyzer, sunny, viewer;
GRANT CONNECT ON DATABASE accounts    TO sunny;

然后我以管理员身份登录到 db exchange 并执行以下操作:

GRANT pg_write_all_data TO capture;
GRANT pg_read_all_data  TO analyzer, sunny, viewer;

然后我在那里创建了一个名为 instruments 的表

然后我以捕获的身份登录到数据库交换并进行插入,然后我得到:

42501:桌面工具的权限被拒绝

所以在交换数据库上使用捕获用户,我应该有 pg_write_all_data 属性;为什么我会收到错误消息?

看起来我必须允许使用仪器来捕获..这违背了 pg_write_all_data 的目的。如果我做授权,那么它的工作原理。所以看起来添加角色不起作用。

【问题讨论】:

  • 在 Postgres 14 中,有一个预定义的角色:pg_read_all_datapostgresql.org/docs/current/predefined-roles.html,但这将包括对所有数据库的读取访问权限。但这可以通过不向其他数据库的“全部读取”用户授予 CONNECT 权限来规避。
  • 我读到了这个角色,但没想到我可以阻止用户登录其他数据库!我会尝试一下,谢谢!

标签: postgresql permissions


【解决方案1】:

由于您的用户在不同的数据库中应具有不同的权限,因此请为每个数据库定义只读和读写角色。

例如,db1_rodb1 中具有只读权限,db2_rwdb2 中具有读写权限。然后您可以将它们都授予一个用户,并且该用户在不同的数据库中将具有不同的权限。

使用序列通常意味着调用nextval()。所以你应该给那个用户USAGE 权限。要使用setval(),用户需要UPDATE。无论如何,除了所有者之外,没有人可以ALTER 一个对象。

函数不能设置或更新,只能执行,具有EXECUTE权限,默认授予PUBLIC

【讨论】:

  • 但如何在尚未定义架构和表的上下文中创建这些角色?例如,在我的情况下,db1_ro 需要:在 db1 上的任何其他用户创建的所有模式和表上的 RO
  • 您必须限制可以创建表的角色,并为每个数据库在每个角色上运行ALTER DEFAULT PRIVILEGES
猜你喜欢
  • 2016-05-16
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多