如果我使用普通用户帐户创建表格:
create table test (a text, b text, c text);
同一个用户可以在桌面上执行所有操作......
john=# \z test
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+----------+-------+-------------------+--------------------------
public | testtest | table | john=ardDxt/john |
即使我这样做:
revoke update on test from john;
用户仍然可以更新表格中的行。是否可以更改权限,以便用户不再拥有允许更新的授权?
我甚至试过这个:
revoke all privileges on test from john;
它清除了john = ardDxt,但更新继续有效(假设这是因为john也是数据库和/或表的所有者)。我正在阅读文档本身的内容......
PostgreSQL允许对象所有者撤销他自己的普通用户 特权:例如,表所有者可以将表设为只读 他自己通过撤销自己的INSERT,UPDATE,DELETE和TRUNCATE 特权。
但我似乎无法做到它所说的,而且这些例子相当稀疏。
答案 0 :(得分:0)
解释未来的访客:
超级用户忽略权限检查。这意味着GRANT
是不必要的,REVOKE
无效。超级用户还可以禁用触发器和大量矿石。因此,您无法完全阻止超级用户更新数据。
如果需要防止更新,那么最好的选择实际上是引发异常的触发器(或者只是返回NULL,跳过操作)。超级用户仍然可以禁用触发器,但需要更多的努力。