REVOKE
更新时间:2026-06-24
删除访问权限。
语法
SQL
1 REVOKE [GRANT OPTION FOR] { {SELECT | INSERT | UPDATE | DELETE
2 | REFERENCES | TRIGGER | TRUNCATE } [, ...] | ALL [PRIVILEGES] }
3
4 ON { [TABLE] table_name [, ...]
5 | ALL TABLES IN SCHEMA schema_name [, ...] }
6 FROM { [ GROUP ] role_name | PUBLIC} [, ...]
7 [CASCADE | RESTRICT]
8
9 REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE
10 | REFERENCES } ( column_name [, ...] )
11 [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
12 ON [ TABLE ] table_name [, ...]
13 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
14 [ CASCADE | RESTRICT ]
15
16 REVOKE [GRANT OPTION FOR] { {USAGE | SELECT | UPDATE} [,...]
17 | ALL [PRIVILEGES] }
18 ON { SEQUENCE sequence_name [, ...]
19 | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
20 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
21 [CASCADE | RESTRICT]
22
23 REVOKE [GRANT OPTION FOR] { {CREATE | CONNECT
24 | TEMPORARY | TEMP} [, ...] | ALL [PRIVILEGES] }
25 ON DATABASE database_name [, ...]
26 FROM { [ GROUP ] role_name | PUBLIC} [, ...]
27 [CASCADE | RESTRICT]
28
29 REVOKE [ GRANT OPTION FOR ]
30 { USAGE | ALL [ PRIVILEGES ] }
31 ON DOMAIN domain_name [, ...]
32 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
33 [ CASCADE | RESTRICT ]
34
35 REVOKE [ GRANT OPTION FOR ]
36 { USAGE | ALL [ PRIVILEGES ] }
37 ON FOREIGN DATA WRAPPER fdw_name [, ...]
38 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
39 [ CASCADE | RESTRICT ]
40
41 REVOKE [ GRANT OPTION FOR ]
42 { USAGE | ALL [ PRIVILEGES ] }
43 ON FOREIGN SERVER server_name [, ...]
44 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
45 [ CASCADE | RESTRICT ]
46
47 REVOKE [GRANT OPTION FOR] {EXECUTE | ALL [PRIVILEGES]}
48 ON { FUNCTION funcname ( [[argmode] [argname] argtype
49 [, ...]] ) [, ...]
50 | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
51 FROM { [ GROUP ] role_name | PUBLIC} [, ...]
52 [CASCADE | RESTRICT]
53
54 REVOKE [GRANT OPTION FOR] {USAGE | ALL [PRIVILEGES]}
55 ON LANGUAGE langname [, ...]
56 FROM { [ GROUP ] role_name | PUBLIC} [, ...]
57 [ CASCADE | RESTRICT ]
58
59 REVOKE [GRANT OPTION FOR] { {CREATE | USAGE} [, ...]
60 | ALL [PRIVILEGES] }
61 ON SCHEMA schema_name [, ...]
62 FROM { [ GROUP ] role_name | PUBLIC} [, ...]
63 [CASCADE | RESTRICT]
64
65 REVOKE [GRANT OPTION FOR] { CREATE | ALL [PRIVILEGES] }
66 ON TABLESPACE tablespacename [, ...]
67 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
68 [CASCADE | RESTRICT]
69
70 REVOKE [ GRANT OPTION FOR ]
71 { USAGE | ALL [ PRIVILEGES ] }
72 ON TYPE type_name [, ...]
73 FROM { [ GROUP ] role_name | PUBLIC } [, ...]
74 [ CASCADE | RESTRICT ]
75
76 REVOKE [ADMIN OPTION FOR] parent_role [, ...]
77 FROM [ GROUP ] member_role [, ...]
78 [CASCADE | RESTRICT]
79 ```
80
81
82
83## 描述
84
85`REVOKE`命令从一个或多个角色撤消先前授予的权限。 关键字`PUBLIC`指所有角色的隐式定义组。
86
87 有关权限类型的含义,请参见`GRANT`命令的描述。
88
89 请注意,任何特定角色将具有直接授予它的权限,授予该角色当前成员的任何角色的权限以及授予`PUBLIC`的权限的总和。因此,例如,从`PUBLIC`撤消`SELECT`权限并不一定意味着所有角色都对该对象失去`SELECT`权限:直接或通过其他角色授予它的那些人仍然拥有该权限。 同样,如果`PUBLIC`或其他成员身份角色仍然具有`SELECT`权限,则从用户撤消`SELECT`可能不会阻止该用户使用`SELECT`。
90
91 如果指定了`GRANT OPTION FOR`,则仅撤销权限的授予选项,而不撤销权限本身。 否则,权限和授予选项都将被撤销。
92
93 如果某个角色拥有带有“授予”选项的权限并将其授予其他角色,则这些其他角色所拥有的权限称为“从属权限”。如果第一个角色持有的权限或授予选项被撤销,并且存在从属权限,则如果指定了`CASCADE`,那些从属权限也将被撤销,否则撤销操作将失败。此递归撤销仅影响通过可追溯到此`REVOKE`命令对象的角色的角色链授予的权限。因此,如果还通过其他角色授予了权限,则受影响的角色可以有效地保留权限。
94
95 当您撤消对表的权限时,PalopgMPP数据库也会撤消对表的每一列的相应列权限(如果有)。另一方面,如果已授予角色某个表的权限,则从单独列中撤消相同的权限将无效。
96
97 撤销角色成员身份时,`GRANT OPTION`改为`ADMIN OPTION`,但行为类似。
98
99
100
101## 参数
102
103参见`GRANT`。
104
105
106
107注解
108: 用户只能撤消该用户直接授予的那些权限。例如,如果用户A向用户B授予了具有授予选项的权限,而用户B又将其授予了用户C,则用户A无法直接从C撤消该权限。而是,用户A可以撤消用户B的授予选项,并使用`CASCADE`选项,以便依次从用户C撤消权限。例如,如果A和B都向C授予相同的权限,则A可以撤消他自己的授予,但不能撤消B的授予,因此C实际上仍然有权限。
109
110 当对象的非所有者尝试`REVOKE`对对象的权限时,如果用户对对象没有任何权限,则该命令将彻底失败。只要有某些权限,该命令就会继续执行,但是它将仅撤销用户具有授予选项的那些权限。如果未保留任何授予选项,则`REVOKE ALL PRIVILEGES`形式将发出警告消息,而如果未保留针对命令中明确指定的任何权限的授予选项,则其他形式将发出警告。(原则上,这些声明也适用于对象所有者,但是由于PalopgMPP数据库始终将所有者视为拥有所有授予选项的对象,因此永远不会发生这种情况。)
111
112 如果数据库管理员选择发出`GRANT`或`REVOKE`命令, 则PalopgMPP数据库将执行该命令,就像它是由受影响对象的所有者发出的一样。由于所有权限最终都来自对象所有者(可能间接地通过授予选项链),因此数据库管理员可以撤消所有权限,但是如上所述,这可能需要使用`CASCADE`。
113
114 `REVOKE`也可以由不是受影响对象的所有者,但是拥有该对象的角色的成员, 或者是持有对该对象具有`WITH GRANT OPTION`权限的角色的成员来调用。在这种情况下,PalopgMPP数据库将执行该命令,就像它是由实际拥有该对象或拥有`WITH GRANT OPTION`权限的用户所包含的角色发出的那样。 例如,如果表`t1`由角色`g1`拥有,而角色`u1`是它的成员,则`u1`可以撤销`t1`上记录为由`g1`授予的权限。这包括`u1`以及角色`g1`的其他成员所做的授权。
115
116 如果执行`REVOKE`的角色通过多个角色成员路径间接持有权限,则未指定将使用哪个包含角色来执行命令。 在这种情况下,最佳实践是使用`SET ROLE`来成为要`REVOKE`的特定角色。 否则,可能会导致撤销您想要的权限以外的权限,或者根本不撤销任何权限。
117
118 使用ssql的`\dp`元命令来获取有关表和列的现有权限的信息。 您还可以使用其他`\d`元命令来显示非表对象的权限。
119
120
121
122## 示例
123
124撤销public对表`films`的插入权限:
125
126 ``` sql
127 REVOKE INSERT ON films FROM PUBLIC;
128 ```
129
130 从`topten`视图中的角色`sally`撤消所有权限。 请注意,这实际上意味着撤销当前角色(如果不是数据库管理员)授予的所有权限。
131
132 ``` sql
133 REVOKE ALL PRIVILEGES ON topten FROM sally;
134 ```
135
136 从用户`joe`撤消角色`admins`的成员资格:
137
138 ``` sql
139 REVOKE admins FROM joe;
140 ```
141
142
143
144兼容性说明
145: `GRANT`命令的兼容性说明也适用于`REVOKE`。
146
147 根据标准,需要`RESTRICT`或`CASCADE`, 但是默认情况下PalopgMPP数据库假定`RESTRICT`。
148
149
150
151相关SQL命令
152: `GRANT`
评价此篇文章
