撤销语句(功能或程序权限)

这种形式的“REVOKE”语句可撤销对用户定义函数、为不同类型生成的转换函数以及存储过程的权限。

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

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

撤销(功能或程序权限)说明

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

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

如果函数是用表参数定义的(在CREATE FUNCTION语句中指定了LIKE TABLE,表示输入参数之一是转换表),则不能使用函数签名来识别函数。 相反,如果功能名称是唯一的,则使用功能名称来识别功能,或者使用其特定名称。

可以为限定或非限定函数名指定 *。 一个 *(或模式名称.*) 表示模式中所有函数的权限都已撤销。 您(或指定的授予者)必须已将 FUNCTION * 的权限授予所有指定用户(包括指定的 PUBLIC)。 特定程序所授予的特权不受影响。

程序 程序名称
标识在当前服务器上定义的存储过程。

对于限定或非限定的过程名称 ,可以指定一个*。 一个*(或模式名。*) 表示撤销该架构中所有程序的特权。 您(或指定的授权人)必须已将程序*的权限授予所有已识别用户(包括指定的公众用户)。 特定程序所授予的特权不受影响。

FROM
有关 FROM 子句的说明,请参阅 REVOKE 语句
BY
关于 BY 子句的描述,请参阅 REVOKE 语句
INCLUDING DEPENDENT PRIVILEGES 或者 NOT INCLUDING DEPENDENT PRIVILEGES
指定撤销授权ID或角色的特权或权限是否也会导致撤销该用户授予的权限。 默认值基于被撤销的权限和系统参数 REVOKE_DEP_PRIVILEGES:
  • 当ACCESSCTRL、DATAACCESS或系统DBADM权限被撤销时, NOT INCLUDING DEPENDENT PRIVILEGES ,且必须在REVOKE语句中指定该子句。
  • 当系统参数 REVOKE_DEP_PRIVILEGES 设置为 NO 时, NOT INCLUDING DEPENDENT PRIVILEGES ,如果语句中包含 INCLUDING DEPENDENT PRIVILEGES
  • 否则, INCLUDING DEPENDENT PRIVILEGES ,则该条款必须在REVOKE语句中指定。
INCLUDING DEPENDENT PRIVILEGES
规定撤销授权ID或角色的特权或权限也会导致撤销从属特权。 这意味着用户发放的任何赠金将继续被撤销,直到链中的所有赠金都被撤销。

INCLUDING DEPENDENT PRIVILEGES 如果系统参数 REVOKE_DEP_PRIVILEGES 设置为 NO,则无法指定,这将强制行为不包括相关权限。

NOT INCLUDING DEPENDENT PRIVILEGES
规定撤销授权ID或角色的特权或权限不会导致撤销用户授予的权限。 然而,对于被撤销的特权,所有因特权被撤销而产生的后果均适用。 例如,如果需要被撤销的权限才能成功绑定一个软件包,那么由于软件包所有者失去了这些权限,该软件包将继续无效。 如果用于创建对象的特权被撤销,对象可能会被删除。

NOT INCLUDING DEPENDENT PRIVILEGES 当ACCESSCTRL、DATAACCESS或系统DBADM权限被撤销时,必须指定。

NOT INCLUDING DEPENDENT PRIVILEGES 如果系统参数 REVOKE_DEP_PRIVILEGES 设置为 toYES, ,则无法指定,该参数强制在撤销时包含相关权限。

RESTRICT
如果撤销者拥有以下对象,且没有其他来源的EXECUTE权限,则防止在用户定义的函数或存储过程中撤销EXECUTE权限:
  • 一个函数,其源代码来自另一个函数
  • 使用该功能的视图
  • 使用函数或存储过程的触发器包
  • 在检查约束或用户定义的默认子句中使用该函数的表格
  • 一个实体化的查询表,其全选功能使用函数
  • 扩展索引,使用功能

撤销(功能或程序权限)注意事项

适用于所有撤销声明表格的注意事项,请参阅撤销声明注意事项

REVOKE(功能或程序权限)示例

示例1 :撤销用户JONES对CALC_SALARY函数的EXECUTE权限。 假设模式中只有一个函数,名为CALC_SALARY。
   REVOKE EXECUTE ON FUNCTION CALC_SALARY FROM JONES;
示例2 :撤销当前服务器上所有用户对VACATION_ACCR程序的EXECUTE权限。
   REVOKE EXECUTE ON PROCEDURE VACATION_ACCR FROM PUBLIC;
示例3: 撤销行政助理向其他用户授予函数DEPT_TOTAL的EXECUTE权限的特权。 行政助理仍对函数DEPT_TOTALS拥有EXECUTE权限。
   REVOKE EXECUTE ON FUNCTION DEPT_TOTALS
         FROM ADMIN_A;
示例4 :撤销人力资源部门(HR)对函数NEW_DEPT_HIRES的EXECUTE权限。 该函数有两个输入参数,数据类型分别为INTEGER和CHAR(10)。 假设模式中有一个以上的函数名为NEW_DEPT_HIRES。
   REVOKE EXECUTE ON FUNCTION NEW_DEPT_HIRES (INTEGER, CHAR(10))
         FROM HR;

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

示例5: 从角色中撤销对函数FIND_EMPDEPT的EXECUTE权限 ROLE1:
   REVOKE EXECUTE ON FUNCTION FIND_EMPDEPT
         FROM ROLE ROLE1;