注册例程的权限

要在数据库中注册例程,被授权的用户将 SPL 命令包含在 CREATE FUNCTION 或 CREATE PROCEDURE 语句中。数据库服务器存储内部注册了的 SPL 例程。下列用户具有在数据库中注册新的例程的资格:
  • 有 DBA 权限的任何用户可在 CREATE 语句中,使用或不使用 DBA 关键字来注册例程。

    要了解 DBA 关键字的说明,请参阅 执行例程的 DBA 权限

  • 没有 DBA 权限的用户需要 Resource 权限来注册 SPL 例程。该例程的创建者是所有者。

    没有 DBA 权限的用户不可使用 DBA 关键字来注册例程。

    DBA 必须给其他需要创建例程的用户授予 Resource 权限。DBA 还可撤销 Resource 权限,防止用户创建更多的例程。

  • 除了对在其中注册 UDR 的数据库保存持有 DBA 权限或 Resource 权限之外,创建 UDR 的用户还必须持有对以其编写 UDR 的编程语言的 Usage 权限。这些 SQL 可为特定的编程语言授予语言级别的 Usage 权限:
    • GRANT USAGE ON LANGUAGE C
    • GRANT USAGE ON LANGUAGE JAVA
    • GRANT USAGE ON LANGUAGE SPL

    除了个别的用户之外,这些权限的被授予者还可为用户定义的角色,或 PUBLIC 组。在将语言级别 Usage 权限授予角色之后,持有那个角色的任何用户都可通过使用 SQL 的 SET ROLE 语句使得该角色的所有访问权限能够指定那个角色作为当前的角色。

对于以 C 语言或 Java™ 语言编写的外部例程,如果启用 IFX_EXTEND_ROLE 配置参数,则仅 DBSA 已授予其 EXTERNAL 角色的用户可注册、删除或修改外部的 UDR 或 DataBlade 模块。在缺省情况下,启用此参数。通过将 IFX_EXTEND_ROLE 配置参数设置为 OFF 或设置为 0,DBSA 可禁用对持有 DataBlade 模块或外部 UDR 的 DDL 操作 EXTEND 角色的要求。然而,此安全特性对 SPL 例程不起作用。

总之,持有以上标识的数据库级别和语言级别自主访问控制权限(且还持有 EXTEND 角色,如果启用 IFX_EXTEND_ROLE 且该 UDR 为外部例程的话)的用户,可在下列 SQL 语句中引用 UDR:
  • DBA 或用户可以 CREATE FUNCTION、CREATE FUNCTION FROM、CREATE PROCEDURE、CREATE PROCEDURE FROM、CREATE ROUTINE 或 CREATE ROUTINE FROM 语句来注册新的 UDR。
  • DBA 或现有 UDR 的所有者可以 DROP FUNCTION、DROP PROCEDURE 或 DROP ROUTINE 语句来取消那个 UDR 的注册。
  • DBA 或现有 UDR 的所有者可以 ALTER FUNCTION、ALTER PROCEDURE 或 ALTER ROUTINE 语句来修改那个 UDR 的定义。