AS grantor 子句

当您将自主访问权限授予其他用户、角色或 PUBLIC 时,在缺省情况下,您是可取消那些权限的用户。AS grantor 子句使您建立另一用户作为您正在授予权限的源。

当您使用 AS grantor 子句时, AS grantor 子句中提供的登录名取代相应系统目录表中您的登录名。如果您有对该数据库的 DBA 权限,则您可使用此子句。

在您使用此子句之后,仅指定的 grantor 可取消当前 GRANT 操作产生的影响。即使 DBA 也不可取消权限,除非那个 DBA 作为授予了该权限的用户被罗列在系统目录表中。

下列示例展示此情况。您是 DBA,且您将对 items 表的所有权限授予用户 tom,随同授予所有权限的权利:
REVOKE ALL ON items FROM PUBLIC;
GRANT ALL ON items TO tom WITH GRANT OPTION;
下一示例展示不同的情况。您还可将 Select 和 Update 权限授予用户 jim,但您指定作为用户 tom 授予了该权限。(数据库服务器在 systabauth 系统目标表中的记录显示用户 tom 为那些权限的授予者,而不是您。)
GRANT SELECT, UPDATE ON items TO jim AS tom;
随后,您决定从用户 user tom 取消对 items 表的权限,于是您发出下列语句:
REVOKE ALL ON items FROM tom;
然而,如果不是如此,您试图以类似的语句从用户 jim 取消权限。则数据库服务器返回错误,如下例所示:
REVOKE SELECT, UPDATE ON items FROM jim;

580: Cannot revoke permission.

因为数据库服务器记录显示原始的授权者为用户 tom,且您不可取消该权限,所以您收到错误。虽然您是 DBA,但您不可取消另一用户授予了的权限。

在 GRANT DEFAULT ROLE 语句内,AS grantor 子句无效。

要了解 AS grantor 子句处需要的上下文,而不是可选项,请参阅 将 Execute 权限授予 PUBLIC