Postgres - 如何将权限限制为 create/drop a table?

Postgres - how can I restrict the privilege to create/drop a table?

我想在 PostgreSQL 数据库中创建“只读权限”(包括创建或删除表的限制)。

我的策略是创建一个具有这些权限的组,然后添加已取消所有权限的角色。这样,只有属于只读组时才继承权限。

我使用以下命令创建权限,但似乎角色可以在加入组时添加、删除表:

role_test_db=# REVOKE ALL ON DATABASE role_test_db FROM select_access_group;
REVOKE
role_test_db=# GRANT CONNECT ON DATABASE role_test_db TO select_access_group;
GRANT
role_test_db=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO select_access_group;
GRANT

我正在阅读 documentation,创建表似乎需要 CREATE 权限,但我没有授予此权限。有人能解释一下为什么这个组的部分用户仍然可以制作表格吗?

用户只能撤销由该用户直接授予的权限

https://www.postgresql.org/docs/13/sql-revoke.html

查看权限

  1. \du
  2. select * 来自 pg_roles;

更改管理员角色 (postgres) 下的(基本)权限

有几个错误:

  1. 撤销对数据库的权限不会限制用户创建对象的权限。为此,您必须撤销对模式的特权。

  2. 您只能 REVOKEGRANT 的权限(默认或明确)。我怀疑 select_access_group 是否曾被授予对数据库的任何权限。

您可能忘记撤销架构 public 上危险的默认 CREATE 权限。以超级用户身份连接并 运行

REVOKE CREATE ON SCHEMA public FROM PUBLIC;