REVOKE
REVOKE¶
删除访问权限。
- 语法
-
``` sql REVOKE [GRANT OPTION FOR] { {SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER | TRUNCATE } [, …] | 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 funcname ( [[argmode] [argname] argtype [, …]] ) [, …] | ALL FUNCTIONS IN SCHEMA schema_name [, …] } FROM { [ GROUP ] role_name | PUBLIC} [, …] [CASCADE | RESTRICT]
REVOKE [GRANT OPTION FOR] {USAGE | ALL [PRIVILEGES]} ON LANGUAGE langname [, …] 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 tablespacename [, …] 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] parent_role [, …] FROM [ GROUP ] member_role [, …] [CASCADE | RESTRICT] ```
- 描述
-
REVOKE
命令从一个或多个角色撤消先前授予的权限。 关键字PUBLIC
指所有角色的隐式定义组。有关权限类型的含义,请参见
GRANT
命令的描述。请注意,任何特定角色将具有直接授予它的权限,授予该角色当前成员的任何角色的权限以及授予
PUBLIC
的权限的总和。因此,例如,从PUBLIC
撤消SELECT
权限并不一定意味着所有角色都对该对象失去SELECT
权限:直接或通过其他角色授予它的那些人仍然拥有该权限。 同样,如果PUBLIC
或其他成员身份角色仍然具有SELECT
权限,则从用户撤消SELECT
可能不会阻止该用户使用SELECT
。如果指定了
GRANT OPTION FOR
,则仅撤销权限的授予选项,而不撤销权限本身。 否则,权限和授予选项都将被撤销。如果某个角色拥有带有“授予”选项的权限并将其授予其他角色,则这些其他角色所拥有的权限称为“从属权限”。如果第一个角色持有的权限或授予选项被撤销,并且存在从属权限,则如果指定了
CASCADE
,那些从属权限也将被撤销,否则撤销操作将失败。此递归撤销仅影响通过可追溯到此REVOKE
命令对象的角色的角色链授予的权限。因此,如果还通过其他角色授予了权限,则受影响的角色可以有效地保留权限。当您撤消对表的权限时,SeaboxMPP数据库也会撤消对表的每一列的相应列权限(如果有)。另一方面,如果已授予角色某个表的权限,则从单独列中撤消相同的权限将无效。
撤销角色成员身份时,
GRANT OPTION
改为ADMIN OPTION
,但行为类似。 - 参数
- 参见
GRANT
。 - 注解
-
用户只能撤消该用户直接授予的那些权限。例如,如果用户A向用户B授予了具有授予选项的权限,而用户B又将其授予了用户C,则用户A无法直接从C撤消该权限。而是,用户A可以撤消用户B的授予选项,并使用
CASCADE
选项,以便依次从用户C撤消权限。例如,如果A和B都向C授予相同的权限,则A可以撤消他自己的授予,但不能撤消B的授予,因此C实际上仍然有权限。当对象的非所有者尝试
REVOKE
对对象的权限时,如果用户对对象没有任何权限,则该命令将彻底失败。只要有某些权限,该命令就会继续执行,但是它将仅撤销用户具有授予选项的那些权限。如果未保留任何授予选项,则REVOKE ALL PRIVILEGES
形式将发出警告消息,而如果未保留针对命令中明确指定的任何权限的授予选项,则其他形式将发出警告。(原则上,这些声明也适用于对象所有者,但是由于SeaboxMPP数据库始终将所有者视为拥有所有授予选项的对象,因此永远不会发生这种情况。)如果超级用户选择发出
GRANT
或REVOKE
命令, 则SeaboxMPP数据库将执行该命令,就像它是由受影响对象的所有者发出的一样。由于所有权限最终都来自对象所有者(可能间接地通过授予选项链),因此超级用户可以撤消所有权限,但是如上所述,这可能需要使用CASCADE
。REVOKE
也可以由不是受影响对象的所有者,但是拥有该对象的角色的成员, 或者是持有对该对象具有WITH GRANT OPTION
权限的角色的成员来调用。在这种情况下,SeaboxMPP数据库将执行该命令,就像它是由实际拥有该对象或拥有WITH GRANT OPTION
权限的用户所包含的角色发出的那样。 例如,如果表t1
由角色g1
拥有,而角色u1
是它的成员,则u1
可以撤销t1
上记录为由g1
授予的权限。这包括u1
以及角色g1
的其他成员所做的授权。如果执行
REVOKE
的角色通过多个角色成员路径间接持有权限,则未指定将使用哪个包含角色来执行命令。 在这种情况下,最佳实践是使用SET ROLE
来成为要REVOKE
的特定角色。 否则,可能会导致撤销您想要的权限以外的权限,或者根本不撤销任何权限。使用ssql的
\dp
元命令来获取有关表和列的现有权限的信息。 您还可以使用其他\d
元命令来显示非表对象的权限。 - 示例
-
撤销public对表
films
的插入权限:REVOKE INSERT ON films FROM PUBLIC;
从
topten
视图中的角色sally
撤消所有权限。 请注意,这实际上意味着撤销当前角色(如果不是超级用户)授予的所有权限。REVOKE ALL PRIVILEGES ON topten FROM sally;
从用户
joe
撤消角色admins
的成员资格:REVOKE admins FROM joe;
- 兼容性说明
-
GRANT
命令的兼容性说明也适用于REVOKE
。根据标准,需要
RESTRICT
或CASCADE
, 但是默认情况下SeaboxMPP数据库假定RESTRICT
。 - 相关SQL命令
GRANT