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 命令从一个或多个用户或用户组回收先前授予的权限。关键字
PUBLIC 指隐式定义的组,即所有用户。
权限类型的含义见GRANT命令的描述。
注意,任何特定用户所拥有的权限是下列权限的总和:直接授予他的权限、授予他当前所属的任何组的权限,以及授予
PUBLIC 的权限。因此,举例来说,从
PUBLIC 回收 SELECT 权限并不一定意味着所有用户都失去了对该对象的
SELECT 权限:直接拥有它或通过组拥有它的那些用户仍将拥有它。
如果指定了 GRANT OPTION FOR,只回收权限的转授选项,而不回收权限本身。
如果某个用户持有一个带转授选项的权限,并且已把它授予其他用户,那么那些其他用户持有的权限称为依赖权限。如果第一个用户持有的权限或转授选项正在被回收且存在依赖权限,那么在指定了 CASCADE 时那些依赖权限也会被回收,否则回收动作将失败。这种递归回收只影响通过一条可追溯到这条
REVOKE 命令主体的用户的用户链授予的权限。因此,如果受影响的用户还通过其他用户获得了该权限,他们实际上仍可能保有它。
注意
使用psql的 \z 命令显示现有对象上被授予的权限。权限格式的信息另见GRANT。
用户只能回收由该用户直接授予的权限。举例来说,如果用户 A 把一个带转授选项的权限授予了用户 B,而用户 B 又把它授予了用户 C,那么用户 A 无法直接从 C 回收该权限。取而代之的是,用户 A 可以从用户 B 回收转授选项并使用 CASCADE 选项,使该权限自动地从用户 C 回收。
如果超级用户选择发出 GRANT 或 REVOKE
命令,该命令的执行就像它是受影响对象的拥有者发出的一样。由于所有权限最终都来自对象拥有者(可能间接地通过转授选项链),超级用户可以回收所有权限,但这可能需要像上面说的那样使用 CASCADE。
示例
回收 public 在表
films 上的插入权限:
REVOKE INSERT ON films FROM PUBLIC;
回收用户 manuel 在视图 kinds 上的所有权限:
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
兼容性
GRANT命令的兼容性说明同样适用于 REVOKE。语法摘要是:
REVOKE [ GRANT OPTION FOR ]privilegesONobject[ (column[, ...] ) ] FROM { PUBLIC |username[, ...] } { RESTRICT | CASCADE }
按照标准,RESTRICT 或 CASCADE
二者必须指定其一,但 PostgreSQL
默认采用 RESTRICT。