所有权和隐式权限
所有用户都对他们拥有的对象拥有隐式权限。在创建对象时,它的所有者会自动被授予与对象类型相关的所有权限(请参阅数据库对象权限)。无论对象类型如何,以下权限都与所有权密不可分并且不能被撤销,即使是所有者也不能撤销:
-
将所有对象权限授予其他用户并撤销它们
-
ALTER(如适用)和 DROP
-
扩展以下权限:将对象权限授予其他用户和撤销该权限
对象所有者可以撤销他们自己的所有非隐式或普通权限。例如,在创建表时,它的所有者会自动被授予所有隐式和普通权限:
如果用户 Joan
创建表 t1
,她可以撤销自己的普通权限 UPDATE 和 INSERT,这实际上会将该表设为只读:
=> \c - Joan
You are now connected as user "Joan".
=> CREATE TABLE t1 (a int);
CREATE TABLE
=> INSERT INTO t1 VALUES (1);
OUTPUT
--------
1
(1 row)
=> COMMIT;
COMMIT
=> REVOKE UPDATE, INSERT ON TABLE t1 FROM Joan;
REVOKE PRIVILEGE
=> INSERT INTO t1 VALUES (3);
ERROR 4367: Permission denied for relation t1
=> SELECT * FROM t1;
a
---
1
(1 row)
Joan 随后可以还原自己的 UPDATE 和 INSERT 权限:
=> GRANT UPDATE, INSERT on TABLE t1 TO Joan;
GRANT PRIVILEGE
dbadmin=> INSERT INTO t1 VALUES (3);
OUTPUT
--------
1
(1 row)
=> COMMIT;
COMMIT
dbadmin=> SELECT * FROM t1;
a
---
1
3
(2 rows)