【问题标题】:Postgres - how can I restrict the privilege to create/drop a table?Postgres - 如何限制创建/删除表的权限?
【发布时间】:2021-05-30 21:19:46
【问题描述】:

我想在 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 权限下,但我没有授予此权限。有人能解释一下为什么这个组的用户仍然可以制作表格吗?

【问题讨论】:

标签: postgresql privileges


【解决方案1】:

有几个错误:

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

  2. 您只能拥有GRANTed 的REVOKE 权限(默认或显式)。我怀疑select_access_group 是否曾被授予任何数据库权限。

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

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

【讨论】:

  • 就是这样 - 谢谢。因此,如果我想为未来的角色执行此默认设置,我应该使用“ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE FROM ON TABLES TO PUBLIC;” “REVOKE ALL ON DATABASE example_database FROM public;”?还有什么吗?
  • 不,您连接到template1 并在那里撤销权限。 CREATE DATABASE 只是复制模板。
【解决方案2】:

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

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

查看权限

  1. \du
  2. 从 pg_roles 中选择 *;

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

【讨论】:

  • 我明白了,所以我应该使用 superuse - 我的管理员来更改角色和组的基本权限?
猜你喜欢
  • 2018-11-05
  • 2022-12-03
  • 2020-06-03
  • 2017-06-27
  • 2020-10-23
  • 2022-11-14
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多