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
查看权限
- \du
- select * 来自 pg_roles;
更改管理员角色 (postgres) 下的(基本)权限
有几个错误:
撤销对数据库的权限不会限制用户创建对象的权限。为此,您必须撤销对模式的特权。
您只能 REVOKE
已 GRANT
的权限(默认或明确)。我怀疑 select_access_group
是否曾被授予对数据库的任何权限。
您可能忘记撤销架构 public
上危险的默认 CREATE
权限。以超级用户身份连接并 运行
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
我想在 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
查看权限
- \du
- select * 来自 pg_roles;
更改管理员角色 (postgres) 下的(基本)权限
有几个错误:
撤销对数据库的权限不会限制用户创建对象的权限。为此,您必须撤销对模式的特权。
您只能
REVOKE
已GRANT
的权限(默认或明确)。我怀疑select_access_group
是否曾被授予对数据库的任何权限。
您可能忘记撤销架构 public
上危险的默认 CREATE
权限。以超级用户身份连接并 运行
REVOKE CREATE ON SCHEMA public FROM PUBLIC;