我需要什么授权(撤销)才能禁止更新表格?

时间:2015-07-04 04:02:06

标签: sql postgresql permissions grant

如果我使用普通用户帐户创建表格:

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   特权。

但我似乎无法做到它所说的,而且这些例子相当稀疏。

1 个答案:

答案 0 :(得分:0)

解释未来的访客:

超级用户忽略权限检查。这意味着GRANT是不必要的,REVOKE无效。超级用户还可以禁用触发器和大量矿石。因此,您无法完全阻止超级用户更新数据。

如果需要防止更新,那么最好的选择实际上是引发异常的触发器(或者只是返回NULL,跳过操作)。超级用户仍然可以禁用触发器,但需要更多的努力。