选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / SQL 命令 / 角色与权限

SQL COMMAND · 角色与权限

REVOKE

撤销访问权限

REVOKE角色与权限引入 10(基线)现存至 20 devel4 次语法变更

动词
REVOKE
对象
引入版本
10(基线)
状态
现存
语法变更次数
4
手册小节数
5

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

REVOKE GRANT OPTION FOR SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER MAINTAIN , ALL PRIVILEGES ON TABLE table_name , ALL TABLES IN SCHEMA schema_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 2
REVOKE GRANT OPTION FOR SELECT INSERT UPDATE REFERENCES ( column_name , ) , ALL PRIVILEGES ( column_name , ) ON TABLE table_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 3
REVOKE GRANT OPTION FOR USAGE SELECT UPDATE , ALL PRIVILEGES ON SEQUENCE sequence_name , ALL SEQUENCES IN SCHEMA schema_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 4
REVOKE GRANT OPTION FOR CREATE CONNECT TEMPORARY TEMP , ALL PRIVILEGES ON DATABASE database_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 5
REVOKE GRANT OPTION FOR USAGE ALL PRIVILEGES ON DOMAIN domain_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 6
REVOKE GRANT OPTION FOR USAGE ALL PRIVILEGES ON FOREIGN DATA WRAPPER fdw_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 7
REVOKE GRANT OPTION FOR USAGE ALL PRIVILEGES ON FOREIGN SERVER server_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 8
REVOKE GRANT OPTION FOR EXECUTE ALL PRIVILEGES ON FUNCTION PROCEDURE ROUTINE function_name ( argmode arg_name arg_type , ) , ALL FUNCTIONS PROCEDURES ROUTINES IN SCHEMA schema_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 9
REVOKE GRANT OPTION FOR USAGE ALL PRIVILEGES ON LANGUAGE lang_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 10
REVOKE GRANT OPTION FOR SELECT UPDATE , ALL PRIVILEGES ON LARGE OBJECT loid , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 11
REVOKE GRANT OPTION FOR SET ALTER SYSTEM , ALL PRIVILEGES ON PARAMETER configuration_parameter , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 12
REVOKE GRANT OPTION FOR CREATE USAGE , ALL PRIVILEGES ON SCHEMA schema_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 13
REVOKE GRANT OPTION FOR CREATE ALL PRIVILEGES ON TABLESPACE tablespace_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 14
REVOKE GRANT OPTION FOR USAGE ALL PRIVILEGES ON TYPE type_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
REVOKE · 语法 15
REVOKE ADMIN INHERIT SET OPTION FOR role_name , FROM role_specification , GRANTED BY role_specification CASCADE RESTRICT
role_specification
GROUP role_name PUBLIC CURRENT_ROLE CURRENT_USER SESSION_USER

语法概要

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    ON [ TABLE ] table_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE sequence_name [, ...]
         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN domain_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER fdw_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER server_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE lang_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] }
    ON PARAMETER configuration_parameter [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE tablespace_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE type_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]
    role_name [, ...] FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

where role_specification can be:

    [ GROUP ] role_name
  | PUBLIC
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

PostgreSQL 18 手册 · 查看完整参考页

描述

REVOKE 命令从一个或多个角色那里撤销先前授予的权限。 关键字 PUBLIC 指的是由所有角色组成的隐式定义组。

有关各种权限类型的含义,请参见 GRANT 命令的描述。

请注意,任何特定角色实际拥有的权限,是直接授予给它的权限、授予给它当前 所属任一角色的权限,以及授予给 PUBLIC 的权限之和。 因此,例如,从 PUBLIC 撤销 SELECT 权限, 并不一定意味着所有角色都失去了该对象上的 SELECT 权限: 那些被直接授予该权限或通过其他角色获得该权限的角色仍然拥有它。类似地, 从某个用户撤销 SELECT 权限,如果 PUBLIC 或其所属的其他角色仍然拥有 SELECT 权限,该用户仍可能 使用 SELECT

如果指定了 GRANT OPTION FOR,则只撤销该权限的授予选项, 而不撤销权限本身。否则,权限和授予选项都会被撤销。

如果某个用户持有带授予选项的权限,并且已经将其授予其他用户,那么其他 用户持有的这些权限称为依赖权限。若正在撤销第一个用户持有的该权限或其 授予选项,并且存在依赖权限,则在指定 CASCADE 时这些 依赖权限也会被一并撤销;否则,该撤销操作会失败。此递归撤销只影响那些 通过某条可追溯到本 REVOKE 命令目标用户的用户链授予的权限。 因此,如果受影响用户还通过其他用户获得了同一权限,那么他们实际上可能 仍保有该权限。

在撤销某个表上的权限时,该表每一列上的对应列权限(若有)也会自动被 撤销。反过来,如果某个角色已被授予表级权限,那么从单独列上撤销同一 权限不会产生任何效果。

在撤销角色成员资格时,GRANT OPTION 改称为 ADMIN OPTION,但行为类似。请注意,在 PostgreSQL 16 之前的版本中,系统不会跟踪 角色成员资格授权所产生的依赖权限,因此 CASCADE 对 角色成员资格没有效果。现在情况已不再如此。另请注意,这种形式的命令不允许在 role_specification 中使用噪声词 GROUP

正如可以从现有角色成员资格授权中移除 ADMIN OPTION 一样, 也可以撤销 INHERIT OPTIONSET OPTION。 这等价于将相应选项的值设为 FALSE

注解

用户只能撤销由自己直接授予的权限。例如,如果用户 A 已将某项带授予选项 的权限授予用户 B,而用户 B 又将其授予用户 C,则用户 A 不能直接从 C 撤销该权限。相反,用户 A 可以从 B 撤销授予选项,并使用 CASCADE 选项,这样该权限就会进一步从 C 撤销。再例如, 如果 A 和 B 都将同一权限授予了 C,A 可以撤销自己授予的那份,但不能撤销 B 授予的那份,因此 C 实际上仍会拥有该权限。

当对象的非拥有者尝试对该对象执行 REVOKE 时,如果该用户 在该对象上完全没有任何权限,命令将立即失败。只要该用户至少拥有某项 权限,命令就会继续执行,但只会撤销那些该用户持有授予选项的权限。 如果未持有任何授予选项,REVOKE ALL PRIVILEGES 形式 会发出警告;而其他形式如果命令中特别列出的任一权限未持有其授予选项, 也会发出警告。(原则上,这些说明也适用于对象拥有者;但由于拥有者始终 被视为持有全部授予选项,这种情况实际上不会发生。)

如果超级用户选择执行 GRANTREVOKE 命令,则该命令会像由受影响对象的拥有者发出那样执行。(由于角色没有 拥有者,在 GRANT 角色成员资格时,该命令会像由引导 超级用户发出那样执行。)由于所有权限最终都来自对象拥有者 (可能经由授予选项链间接传递),超级用户可以撤销所有权限,但如上所述, 这可能需要使用 CASCADE

REVOKE 也可以由并非受影响对象拥有者的角色执行,只要 该角色是拥有该对象之角色的成员,或者是持有该对象上 WITH GRANT OPTION 权限之角色的成员。在这种情况下, 该命令会视同由实际拥有该对象的角色,或持有该对象上 WITH GRANT OPTION 权限的角色发出。例如,如果表 t1 由角色 g1 拥有,而角色 u1g1 的成员,那么 u1 可以撤销 t1 上那些记录为由 g1 授出的权限。这包括由 u1 以及角色 g1 的其他成员作出的授权。

如果执行 REVOKE 的角色通过多条角色成员资格路径间接 持有权限,则系统不会指明将使用哪一个上层角色来执行该命令。在这种情况 下,最佳做法是使用 SET ROLE 切换成你希望作为其身份执行 REVOKE 的那个具体角色。否则,可能会撤销掉并非你本意 要撤销的权限,或者根本没有撤销任何权限。

有关具体权限类型以及如何检查对象权限的更多信息,请参见 Section 5.8

示例

撤销表 films 上授予所有用户的插入权限:

REVOKE INSERT ON films FROM PUBLIC;

撤销用户 manuel 在视图 kinds 上的所有权限:

REVOKE ALL PRIVILEGES ON kinds FROM manuel;

请注意,这实际上意味着 撤销所有由我授予的权限

撤销用户 joe 在角色 admins 中的成员资格:

REVOKE admins FROM joe;

兼容性

GRANT 命令的兼容性注解同样适用于 REVOKE。按照标准,关键词 RESTRICTCASCADE 是必需的,但 PostgreSQL 默认假定为 RESTRICT

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 20← 19语法变化

    − { SELECT | ALL [ PRIVILEGES ] }− ON PROPERTY GRAPH graph_name [, ...]− FROM role_specification [, ...]− [ GRANTED BY role_specification ]− [ CASCADE | RESTRICT ]− REVOKE [ GRANT OPTION FOR ]正文更新
  2. PostgreSQL 19← 18语法变化

    + { SELECT | ALL [ PRIVILEGES ] }+ ON PROPERTY GRAPH graph_name [, ...]+ FROM role_specification [, ...]+ [ GRANTED BY role_specification ]+ [ CASCADE | RESTRICT ]+ + REVOKE [ GRANT OPTION FOR ]正文更新
  3. PostgreSQL 14← 13语法变化

    + { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ CASCADE | RESTRICT ]+ + REVOKE [ GRANT OPTION FOR ]+ { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] }+ ON PARAMETER configuration_parameter [, ...]+ FROM role_specification [, ...]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ [ GRANTED BY role_specification ]+ REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]+ where role_specification can be:+ | CURRENT_ROLE− { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }− REVOKE [ ADMIN OPTION FOR ]− 其中role_specification可以是:正文更新
  4. PostgreSQL 12← 11正文更新

    正文更新
  5. PostgreSQL 11← 10语法变化

    + ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]+ | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }− ON { FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]− | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }

同组命令

命令动词对象版本变动最近变更
ROLES & PRIVILEGES角色与权限20 条
GRANTGRANT 204 次
定义访问权限现存
REVOKEREVOKE 204 次
撤销访问权限现存
ALTER DEFAULT PRIVILEGESALTERDEFAULT PRIVILEGES 143 次
定义默认访问权限现存
CREATE GROUPCREATEGROUP 192 次
定义一个新的数据库角色现存
ALTER GROUPALTERGROUP 141 次
更改角色名称或成员资格现存
DROP GROUPDROPGROUP
移除一个数据库角色现存
SECURITY LABELSECURITYLABEL 122 次
定义或更改应用于对象的安全标签现存
DROP OWNEDDROPOWNED 141 次
移除一个数据库角色所拥有的数据库对象现存
REASSIGN OWNEDREASSIGNOWNED 141 次
更改一个数据库角色所拥有的数据库对象的所有权现存
CREATE POLICYCREATEPOLICY 141 次
为一个表定义一条新的行级安全性策略现存
ALTER POLICYALTERPOLICY 141 次
更改一条行级安全性策略的定义现存
DROP POLICYDROPPOLICY
从一个表中移除一条行级安全性策略现存
CREATE ROLECREATEROLE 142 次
定义一个新的数据库角色现存
ALTER ROLEALTERROLE 142 次
更改数据库角色现存
DROP ROLEDROPROLE
移除一个数据库角色现存
SET ROLESETROLE
设置当前会话的当前用户标识符现存
SET SESSION AUTHORIZATIONSETSESSION AUTHORIZATION
设置当前会话的会话用户标识符和当前用户标识符现存
CREATE USERCREATEUSER 192 次
定义一个新的数据库角色现存
ALTER USERALTERUSER 142 次
更改数据库角色现存
DROP USERDROPUSER
移除一个数据库角色现存