如果您从 user 取消您使用 WITH GRANT OPTION 关键字授予的权限或角色,则切断由那个 user
授予的权限的链条。
这样,当您从用户或从角色取消权限时,您还取消了在下列上下文中 GRANT 语句所产生的相同的
权限:
由您的被授予者发出的
允许,因为您的被授予者指定了 WITH GRANT OPTION 子句
允许,因为后续的被授予者使用 WITH GRANT OPTION 子句授予了相同的权限或角色
在给特定的用户指定权限的 GRANT 语句中,仅 WITH GRANT OPTION 子句是有效的。被授予
者不可为 PUBLIC 组或角色。
下列示例展示权限的取消。假设您,作为表 items 的所有者,发出下列语句来将访问权限授予用
户 mary:
REVOKE ALL ON items FROM PUBLIC;
GRANT SELECT, UPDATE ON items TO mary WITH GRANT OPTION;
然后,用户 mary 使用她的新权限来授予用户 cathy 和 paul 对 items 表的访问:
GRANT SELECT, UPDATE ON items TO cathy;
GRANT SELECT ON items TO paul;
稍后,您从用户 mary 取消对 items 表的权限:
REVOKE SELECT, UPDATE ON items FROM mary;
此单一语句有效地从用户 mary、cathy 和 paul 取消对 items 表的所有权限。
CASCADE 关键字与此缺省的情况有相同的作用。
AS 子句
若没有 AS 子句,执行 REVOKE 语句的用户必须为正被取消的权限的授予者。DBA
或该对象的所有者可使用 AS 子句来指定另一用户(必须为该权限的授予者)作为该
权限的取消者。
AS 子句提供唯一的机制,可取消对其 owner 为诸如 gbasedbt 这样的授权标识符的数据库对象的
权限,该标识符还不是操作系统已知的有效的用户账户。
要了解 AS revoker 子句需要的,而不是可选的,上下文,请参阅 将 Execute 权限从 PUBLIC 取
消。
CASCADE 关键字对 UNDER 权限的作用
如果您以 CASCADE 选项取消对类型表的 Under 权限,则从指定的用户移除 Under 权限,并从
数据库删除那个用户在该类型表之下创建的任何子表。
如果当那个数据类型正在使用时,您以 CASCADE 选项取消对命名的 ROW 类型的 Under 权
限,则 REVOKE 失败。对 CASCADE 选项的缺省的行为会发生例外,因为数据库服务器支持仅
带有 RESTRICT 关键字的 DROP ROW TYPE 语句。
例如,假设用户 jeff 创建名为 rtype1 的 ROW 类型,并将对那个 ROW 类型的 Under 权限授
予用户 mary。现在,用户 mary 在 ROW 类型 rtype1 之下创建名为 rtype2 的 ROW 类型,并
将对 ROW 类型 rtype2 的 Under 权限授予用户 andy。然后,用户 andy 在 ROW 类型 rtype2
之下创建名为 rtype3 的 ROW 类型。
如果现在用户 jeff 试图以 CASCADE 选项从用户 mary 取消对 ROW 类型 rtype1 的 Under 权
限,则 REVOKE 语句失败,因为 ROW 类型 rtype2 仍在被 ROW 类型 rtype3 所使用。