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




