我是PostgreSQL的忠实粉丝,但有一个内置用户管理方面的问题我搞不清楚。
我的问题是我已经设置了pgAdmin,并将一些非开发人员手动更新特定表中的数据。因此,我创建了一个名为“admin”的新用户,并希望限制此用户的权限。
我尝试使用以下查询(来自另一个用户)删除用户的所有权限:
当我在名为“crap”的表上从用户管理员写一个简单的SELECT语句时,出现了以下错误:
但是,我能够使用现在不应该有任何权限的用户管理员执行以下操作:
我对此感到非常惊讶。这个用户不是Postgres超级用户。如何取消特定用户删除表的权限?
我的问题是我已经设置了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”的表上从用户管理员写一个简单的SELECT语句时,出现了以下错误:
ERROR: permission denied for relation crap
。但是,我能够使用现在不应该有任何权限的用户管理员执行以下操作:
DROP TABLE crap;
这怎么可能呢?我对此感到非常惊讶。这个用户不是Postgres超级用户。如何取消特定用户删除表的权限?
只有表所有者、架构所有者和超级用户才能删除表。
那么这是谁的表? - undefinedSELECT * FROM pg_tables WHERE tablename = 'crap';
显示了在这个例子中,用户"admin"并不是所有者。 - undefined