↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 8.0 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

REVOKE

REVOKE — 移除访问权限

大纲

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] tablename [, ...]
    FROM { username | GROUP groupname | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE dbname [, ...]
    FROM { username | GROUP groupname | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON FUNCTION funcname ([type, ...]) [, ...]
    FROM { username | GROUP groupname | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE langname [, ...]
    FROM { username | GROUP groupname | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schemaname [, ...]
    FROM { username | GROUP groupname | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE tablespacename [, ...]
    FROM { username | GROUP groupname | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

描述

REVOKE命令从一个或多个用户或用户组撤销先前授予的权限。 关键字PUBLIC代表所有用户组成的隐式定义组。

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

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

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

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

注解

使用psql的\z命令可以 显示现有对象上授予的权限。有关格式的信息,参见 GRANT。

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

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

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

示例

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

REVOKE INSERT ON films FROM PUBLIC;

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

REVOKE ALL PRIVILEGES ON kinds FROM manuel;

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

兼容性

GRANT命令的兼容性注解同样适用于 REVOKE。按照标准,其语法摘要为:

REVOKE [ GRANT OPTION FOR ] privileges
    ON object [ ( column [, ...] ) ]
    FROM { PUBLIC | username [, ...] }
    { RESTRICT | CASCADE }

RESTRICT或CASCADE之一 是必需的,但PostgreSQL默认假定为 RESTRICT。

另见

GRANT

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。