执行例程的权限
Execute 权限使得用户能够调用例程。通过 EXECUTE 或 CALL 语句,或通过使用表达 式中的函数可能调用例程。下列用户拥有缺省的 Execute 权限,这使得他们能够调用例程:
• 在缺省情况下,任何具有 DBA 权限的用户都可执行数据库中的任何例程。
• 如果以限定的 CREATE DBA FUNCTION 或 CREATE DBA PROCEDURE 语句 注册该例程,则仅拥有 DBA 权限的用户对那个例程有缺省的 Execute 权限。
• 如果数据库不符合 ANSI,则用户 public(任何拥有 Connect 数据库权限的用户) 自动地拥有对例程的 Execute 权限,未以 DBA 关键字注册该例程。
• 在符合 ANSI 的数据库中,过程所有者和任何拥有 DBA 权限的用户都可执行该 例程,而无需收到附加的权限。
授予和撤销 Execute 权限
例程有下列 GRANT 和 REVOKE 要求:
• DBA 可将 Execute 权限授予数据库中的任何例程,也可撤销它。
• 例程的创建者可授予或取消对那个特定的例程的 Execute 权限。通过包括带有 GRANT EXECUTE ON 语句的 AS grantor 子句,创建者丧失授予或撤销的能力。
• 如果所有者在 GRANT EXECUTE ON 语句中应用了 WITH GRANT 关键字,则另 一用户可授予 Execute 权限。
对于下列条件,DBA 或例程所有者必须显式地将 Execute 权限授予非 DBA 用户:
• 以 DBA 关键字子句注册了的例程
• 在符合 ANSI 的数据库中的例程
• 不符合 ANSI 的数据库中的例程,但将 NODEFDAC 环境变量设置为 yes。
即使数据库服务器缺省地将权限授予 public,所有者也可限制对例程的 Execute 权限。为 此,请发出 REVOKE EXECUTE ON PUBLIC 语句。DBA 和所有者仍可执行该例程,且 如果使用的话,则可将 Execute 权限授予特定的用户。
使用 COMMUTATOR 和 NEGATOR 函数的 Execute 权限
重要: 如果您显式地授予对 SPL 函数的 Execute 权限,其为 UDR 的换向函数或否定函数, 则在被授予者可使用任意函数之前,您还必须授予对换向函数或否定函数的那种权限。您不可 随同 SPL 过程指定 COMMUTATOR 或 NEGATOR 修饰符。
下列示例演示对于函数的限制授权,以及将它的否定函数限定为一组用户。假设您创建下 列否定函数对:
CREATE FUNCTION greater(y PERCENT, z PERCENT) RETURNS BOOLEAN NEGATOR= less(y PERCENT, z PERCENT); . . . CREATE FUNCTION less(y PERCENT, z PERCENT) RETURNS BOOLEAN NEGATOR= greater(y PERCENT, z PERCENT);
在缺省情况下,任何用户都可执行该函数和否定函数。下列函数仅允许 accounting 执行这 些函数:
REVOKE EXECUTE ON FUNCTION greater FROM PUBLIC; REVOKE EXECUTE ON FUNCTION less FROM PUBLIC; GRANT accounting TO mary, jim, ted; GRANT EXECUTE ON FUNCTION greater TO accounting; GRANT EXECUTE ON FUNCTION less TO accounting;
用户可能接收附带 WITH GRANT OPTION 授权的 Execute 权限来将 Execute 权限授予 其他用户。如果用户失去对例程的 Execute 权限,则还从通过那个用户授予了 Execute 权 限的那些用户撤销 Execute 权限。
要获取更多信息,请参阅《GBase 8s SQL 指南:语法》 中的 GRANT 和 REVOKE 语句 描述。




