微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgres - 如何限制创建/删除表的权限?

如何解决Postgres - 如何限制创建/删除表的权限?

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

解决方法

有几个错误:

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

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

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

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
,

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

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

查看权限

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。