例程级权限

如果您从用户取消对 UDR 的 Execute 权限,则那个用户不可再以任何方式执行那个 UDR。要获取用户可如何执行 UDR 的详细信息,请参阅 例程级权限
例程级权限
元素 描述 限制 语法
routine 用户定义的例程 必须存在 标识符
SPL_routine SPL 例程 在该数据库中必须为唯一的 标识符

在符合 ANSI 的数据库中,owner 名称必须限定 routine 名称,除非发出 REVOKE 语句的用户为该例程的所有者。

下列示例取消用户 mark 对由 luke 所拥有的 delete_order 例程的 Execute 权限:
REVOKE EXECUTE ON ROUTINE luke.delete_order FROM mark;
        

GBase 8s 中,任何您授予 Execute 权限的取反函数都需要单独的、显式的 REVOKE 语句。

当您在任何下列环境之下创建 UDR,都不会缺省地授予 PUBLIC Execute 权限。因此,在您可取消它之前,您必须显式地授予 Execute 权限:
  • 您在符合 ANSI 的数据库中创建 UDR。
  • 您有 DBA 权限且在 CREATE 关键字之后指定 DBA 来将 Execute 权限限定给拥有 DBA 数据库级权限的用户。
  • NODEFDAC 环境变量设置为 yes 来防止 PUBLIC 收到任何未被显式地授予的权限。

但如果您在没有任何那些条件生效的情况下创建 UDR,则 PUBLIC 可无需 GRANT EXECUTE 语句即可执行您的 UDR。要限定谁可执行您的 UDR,请通过 FROM PUBLIC 取消 Execute 权限,并将它授予用户(请参阅 用户列表)或角色(请参阅 角色名称)。

GBase 8s 中,如果两个或多个 UDR 有相同的名称,则请从此列表使用关键字来指定用户列表可不再执行那些 UDR 中的哪些。

关键字
防止用户执行的 UDR
SPECIFIC
通过 specific name 标识的 UDR
FUNCTION
任何带有指定的 routine name 的函数(以及与 routine 参数列表相匹配的参数类型,如果指定的话)
PROCEDURE
任何带有指定的 routine name 的过程(以及与 routine 参数列表相匹配的参数类型,如果指定的话)
ROUTINE
带有指定的 routine name 的函数或过程(以及与 routine 参数列表相匹配的参数类型,如果指定的话)
1 请参阅 例程参数列表
2 请参阅 专用名