GRANT语句(函数或过程权限)

GRANT语句的这种形式授予用户定义的函数、为不同类型生成的转换函数、数组类型和存储过程的权限。

GRANT(功能或程序权限)的语法

阅读语法图跳过可视化语法图GRANTEXECUTEONfunction-designatorPROCEDURE,程序名*TO ,授权名称ROLE角色名称PUBLIC WITH GRANT OPTION
功能代号:
阅读语法图跳过可视化语法图FUNCTION,功能名称(,参数类型)*SPECIFIC FUNCTION,专有名词
参数类型:
阅读语法图跳过可视化语法图数据类型AS LOCATOR1
数据类型:
阅读语法图跳过可视化语法图built-in-type2独特类型名称数组类型名称3
注意:
  • 1 AS LOCATOR只能指定为LOB数据类型或基于LOB数据类型的不同类型。
  • 2 有关该片段的语法图,请参阅内置类型的语法。
  • 3 array-type-name 仅支持编译后的 SQL 标量函数。

GRANT(功能或程序权限)描述

EXECUTE
授予运行已识别用户定义函数、为不同类型生成的转换函数或存储过程的权限。
function-designator

标识授予特权的功能。 当前服务器上必须存在该函数,且该函数必须是由CREATE FUNCTION语句定义的函数,或由CREATE TYPE语句生成的转换函数。 可通过名称、函数签名或特定名称来识别函数。 函数设计器通过名称、唯一标识函数的函数签名或具体名称来标识 SQL 函数。 更多信息,请参阅功能代号

对于非限定函数名,可以使用星号(*)进行指定。 该函数可以被标识为限定或非限定函数名。 例如,*表示该权限适用于默认模式中的所有功能,包括当前不存在的功能。 模式名称.* 表示该权限适用于指定架构中的所有功能,包括当前不存在的功能。 如果使用*或模式名称 ,则需要SYSADM权限 被指定。 指定星号不会影响已授予某个函数的任何EXECUTE权限。

如果函数是用表参数定义的(在CREATE FUNCTION语句中指定了 LIKE TABLE name AS LOCATOR子句 ,以指示输入参数之一是转换表),则函数签名不能用于唯一标识函数。 请使用其他语法变体之一来识别函数,如果函数名称是唯一的,则使用函数名称,否则使用特定名称。

程序 程序名称

标识在当前服务器上定义的存储过程。 名称(包括隐式或显式模式名称)必须标识当前服务器上存在的存储过程。

对于非限定性程序名称,可以使用星号(*)。 该过程可以被标识为合格或不合格的过程名称。 例如,*表示该权限适用于默认架构中的所有程序,包括当前不存在的程序。 模式名称.* 表示该权限适用于指定架构中的所有程序,包括当前不存在的程序。 如果使用*或模式名称 ,则需要SYSADM权限 被指定。 指定星号不会影响已经授予某个过程的任何EXECUTE权限。

TO
请参阅 GRANT语句 ,了解TO子句的说明。
WITH GRANT OPTION
关于WITH GRANT OPTION子句的描述,请参阅 GRANT语句

GRANT(函数或过程权限)示例

  • 将函数 CALC_SALARY 的 EXECUTE 权限授予用户 JONES。 假定该模式中只有一个名为 CALC_SALARY 的函数。

       GRANT EXECUTE ON FUNCTION CALC_SALARY TO JONES;
  • 向当前服务器上的所有用户授予存储过程 VACATION_ACCR 的 EXECUTE 权限。
       GRANT EXECUTE ON PROCEDURE VACATION_ACCR TO PUBLIC;
  • 将 DEPT_TOTALS 功能的 EXECUTE 权限授予行政助理,并允许助理将此功能的 EXECUTE 权限授予其他人。 该函数具有特定名称 DEPT85_TOT。 假设模式中有一个以上的名为DEPT_TOTALS的函数。

       GRANT EXECUTE ON SPECIFIC FUNCTION DEPT85_TOT TO ADMIN_A
             WITH GRANT OPTION;
  • 将函数 NEW_DEPT_HIRES 的 EXECUTE 权限授予 HR(人力资源部)。 该函数有两个输入参数,数据类型分别为INTEGER和CHAR(10)。 假设模式中有一个以上的函数名为NEW_DEPT_HIRES。

       GRANT EXECUTE ON FUNCTION NEW_DEPT_HIRES (INTEGER, CHAR(10))
             TO HR;

    您也可以将CHAR(10)数据类型编码为CHAR()。

  • 授予角色 FIND_EMPDEPT 函数的 EXECUTE 权限 ROLE1:

    GRANT EXECUTE ON FUNCTION FIND_EMPDEPT TO ROLE ROLE1;