REVOKE
REVOKE - 删除访问权限
语法格式
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON { SEQUENCE sequence_name [, ...]
| ALL SEQUENCES IN SCHEMA schema_name [, ...] }
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN domain_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER fdw_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER server_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON { FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
| ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE lang_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECT loid [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON TYPE type_name [, ...]
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ ADMIN OPTION FOR ]
role_name [, ...] FROM role_name [, ...]
[ CASCADE | RESTRICT ]
说明
REVOKE 命令撤消先前从一个或多个角色授予的权限。关键字 PUBLIC 指的是隐式定义的所有角色组。
有关权限类型的含义,请参阅 GRANT命令的说明。
请注意,任何特定角色都将拥有直接授予它的权限总和,授予其当前成员的任何角色的权限,以及授予PUBLIC 的权限。因此,例如,从 PUBLIC 撤消 SELECT特权并不一定意味着所有角色都对对象失去了 SELECT特权:直接授予或通过其他角色授予的特权仍然拥有它。同样,如果 PUBLIC或其他成员身份角色仍具有 SELECT 权限,则撤消用户的 SELECT可能无法阻止该用户使用 SELECT 。
如果指定了 GRANT OPTION FOR,则仅撤消该权限的grant选项,而不是该权限本身。否则,将撤消权限和授予选项。
如果用户拥有具有grant选项的权限并已将其授予其他用户,则这些其他用户持有的权限称为从属权限。如果第一个用户持有的权限或授予选项被撤销且存在相关权限,则如果指定了CASCADE,则也会撤销这些相关权限;如果不是,则撤销动作将失败。此递归撤消仅影响通过可追溯到作为此REVOKE命令主题的用户的用户链授予的权限。因此,受影响的用户可以有效地保留该权限,如果它也是通过其他用户授予的。
撤消对表的权限时,相应的列权限(如果有)也会在表的每列上自动撤消。另一方面,如果角色已被授予对表的特权,则从各个列撤消相同的特权将不起作用。
撤消角色中的成员资格时, GRANT OPTION 会被称为 ADMIN OPTION,但行为类似。另请注意,此命令形式不允许使用噪声字 GROUP 。
注意事项
使用 psql的 dp命令显示在现有表和列上授予的权限。有关格式的信息,请参见 GRANT。对于非表对象,还有其他 d 命令可以显示其权限。
用户只能撤消该用户直接授予的权限。例如,如果用户A已向用户B授予了具有grant选项的权限,并且用户B又将其授予用户C,则用户A无法直接从C撤销该权限。相反,用户A可以撤销授权选项来自用户B并使用CASCADE选项,以便从用户C撤销该权限。另一个示例,如果A和B都向C授予了相同的权限,A可以撤销他们自己的授权而不是B的授权,所以C仍将有效地享有特权。
当对象的非所有者尝试对该对象具有 REVOKE权限时,如果该用户对该对象没有任何权限,则该命令将彻底失败。只要有一些权限可用,该命令就会继续,但它将仅撤销用户具有授权选项的权限。如果没有保留授权选项,REVOKE ALL PRIVILEGES表单将发出警告消息,而如果未保留命令中特定命名的任何特权的授予选项,则其他表单将发出警告。(原则上这些陈述也适用于对象所有者,但由于所有者始终被视为持有所有授权选项,因此案例永远不会发生。)
如果超级用户选择发出 GRANT 或 REVOKE命令,则执行该命令,就好像它是由受影响对象的所有者发出的一样。由于所有权限最终都来自对象所有者(可能间接通过授权选项链),超级用户可以撤销所有权限,但这可能需要使用CASCADE ,如上所述。
REVOKE也可以由不是受影响对象的所有者的角色完成,但是是拥有该对象的角色的成员,或者是在该对象上拥有特权WITH GRANT OPTION的角色的成员。在这种情况下,执行命令就好像它是由实际拥有该对象的包含角色发出的,或者拥有权限WITH GRANT OPTION 。例如,如果表 t1 由角色 g1 拥有,其中 u1的角色是其成员,则 u1 可以撤消 t1 上记录为 g1 授予的权限。这将包括 u1 以及角色 g1 的其他成员所做的拨款。
如果执行 REVOKE的角色通过多个角色成员资格路径间接保留特权,则未指定包含角色的角色将用于执行命令。在这种情况下,最佳做法是使用SET ROLE 成为您想要执行 REVOKE的特定角色。如果不这样做,可能会导致撤销除您预期的权限之外的权限,或者根本不撤销任何权限。
示例
撤消表 films 上公共的插入权限:
REVOKE INSERT ON films FROM PUBLIC;
在视图 kinds 上撤消用户 manuel 的所有权限:
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
请注意,这实际上意味着”撤消我授予的所有权限”。
从用户 joe 撤消角色 admins 中的成员资格:
REVOKE admins FROM joe;