执行例程的权限
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 权限授予特定的用户。




