REVOKE

删除访问权限。

概要

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命令对象的角色的角色链授予的特权。 因此,如果还通过其他角色授予了特权,则受影响的角色可以有效地保留特权。

当您撤消对表的特权时,MatrixDB数据库也会撤消对表的每一列的相应列特权(如果有)。 另一方面,如果已授予角色某个表的特权,则从单独列中撤消相同的特权将无效。

撤销角色成员身份时,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形式将发出警告消息, 而如果未保留针对命令中明确指定的任何特权的授予选项,则其他形式将发出警告。 (原则上,这些声明也适用于对象所有者,但是由于MatrixDB数据库始终将所有者视为拥有所有授予选项的对象,因此永远不会发生这种情况。)

如果超级用户选择发出GRANT或REVOKE命令, 则MatrixDB数据库将执行该命令,就像它是由受影响对象的所有者发出的一样。 由于所有特权最终都来自对象所有者(可能间接地通过授予选项链), 因此超级用户可以撤消所有特权,但是如上所述,这可能需要使用CASCADE。

REVOKE也可以由不是受影响对象的所有者,但是拥有该对象的角色的成员, 或者是持有对该对象具有WITH GRANT OPTION特权的角色的成员来调用。 在这种情况下,MatrixDB数据库将执行该命令,就像它是由实际拥有该对象或拥有WITH GRANT OPTION特权的用户所包含的角色发出的那样。 例如,如果表t1由角色g1拥有, 而角色u1是它的成员,则u1可以撤销t1上记录为由g1授予的特权。 这包括u1以及角色g1的其他成员所做的授权。

如果执行REVOKE的角色通过多个角色成员路径间接持有特权,则未指定将使用哪个包含角色来执行命令。 在这种情况下,最佳实践是使用SET ROLE来成为要REVOKE的特定角色。 否则,可能会导致撤销您想要的特权以外的特权,或者根本不撤销任何特权。

使用psql的\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, 但是默认情况下MatrixDB数据库假定RESTRICT。

另见

GRANT