【发布时间】:2019-09-11 15:24:12
【问题描述】:
我是 PostgreSQL 的忠实粉丝,但不知道它的某个方面是内置在用户管理中的。
我的问题是我已经设置了 pgAdmin 并且将有一些非开发人员手动更新某些特定表中的数据。为此,我创建了一个名为“admin”的新用户,并希望限制此用户的权限。
我已尝试使用以下查询(来自另一个用户)删除用户的所有权限:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM admin;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM admin;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM admin;
当我在名为“crap”的表上从用户 admin 编写一个简单的 SELECT 语句时,上面确实导致了以下错误:ERROR: permission denied for relation crap。
但是我现在能够对用户 admin 执行以下操作:DROP TABLE crap; 有效!?
我对此感到非常惊讶。此用户不是 Postgres 超级用户。如何删除此权限以删除特定用户的表?
【问题讨论】:
-
来自Docs:
Only the table owner, the schema owner, and superuser can drop a table.那么是谁的表呢? -
感谢您的评论。
SELECT * FROM pg_tables WHERE tablename = 'crap';表明此示例中的用户“admin”不是所有者。
标签: sql postgresql privileges