跳转至

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数据库始终将所有者视为拥有所有授予选项的对象,因此永远不会发生这种情况。)

如果超级用户选择发出GRANTREVOKE命令, 则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

根据标准,需要RESTRICTCASCADE, 但是默认情况下SeaboxMPP数据库假定RESTRICT

相关SQL命令
GRANT