REVOKE(全局变量特权)语句

这种形式的 REVOKE 语句可撤销对已创建的全局变量的一项或多项特权。

调用

此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

授权

该语句的授权标识所拥有的特权必须包括数据库 ACCESSCTRL 或 SECADM 权限或者对包含全局变量的模式的 ACCESSCTRL 权限。

语法

Read syntax diagramSkip visual syntax diagramREVOKE ALLPRIVILEGES,READWRITE ONVARIABLEvariable-nameFROM,USERGROUPROLEauthorization-namePUBLICBY ALLRESTRICT

描述

ALL PRIVILEGES
撤销 authorization-name 针对指定的全局变量持有的所有特权。 如果未指定 ALL,那么必须指定 READ 或 WRITE。 不能多次指定 READ 或 WRITE。
读取
撤销用于读取指定全局变量值的特权。
WRITE
撤销用于为指定全局变量赋值的特权。
ON VARIABLE variable-name
标识要撤销一项或多项特权的全局变量。 variable-name 必须标识当前服务器上存在的全局变量,不是模块变量 (SQLSTATE 42704)。
FROM
指定要从中撤销特权的对象。
用户
指定 authorization-name 标识一个用户。
GROUP
指定 authorization-name 标识一个组。
角色
指定 authorization-name 标识当前服务器上的现有角色 (SQLSTATE 42704)。
授权名称
列示一个或多个用户、组或角色的授权标识。 授权标识列表不得包括发出该语句的用户的授权标识 (SQLSTATE 42502)。
PUBLIC
从 PUBLIC 撤销指定的特权。
BY ALL
从显式授予这些特权(无论由谁授予这些特权)的所有指定用户撤销所有指定的特权。 这是缺省行为。
RESTRICT
指定当有任何对象依赖于被撤销的特权时,该语句将失败。 这是缺省行为。

规则

  • 对于指定的每个 authorization-name如果未指定关键字 USER、GROUP 或 ROLE,那么对于 SYSCAT.VARIABLEAUTH 目录视图中指定对象的所有行,其中被授予者是 authorization-name
    • 如果 GRANTEETYPE 为“U”,那么将使用 USER。
    • 如果 GRANTEETYPE 为“G”,那么将使用 GROUP。
    • 如果 GRANTEETYPE 为"R",那么将使用 ROLE 。
    • 如果 GRANTEETYPE 没有相同的值,那么将返回错误 (SQLSTATE 56092)。
  • 如果任何 SQL 函数、SQL 方法、过程、视图、触发器或其他全局变量包含全局变量并且依赖于被撤销的特权,那么撤销操作将失败 (SQLSTATE 42893)。

注意

  • 如果撤销了全局变量的 READ 特权,那么具有写入全局变量值的依赖项(例如,通过 SET 语句)的包将不受影响,因为全局变量的写操作将由该全局变量的 WRITE 特权控制。
  • 如果撤销了全局变量的 WRITE 特权,那么具有读取全局变量值的依赖项的包将不受影响,因为全局变量的读操作将由该全局变量的 READ 特权控制。
  • 撤销特权不一定会削弱执行该操作的能力。 如果通过不同组或角色的成员资格或通过 PUBLIC 持有必需的特权,那么用户可能可以继续操作。

示例

撤销用户 ZUBIRI 对全局变量 MYSCHEMA.MYJOB_PRINTER 的 WRITE 特权。
   REVOKE WRITE ON VARIABLE MYSCHEMA.MYJOB_PRINTER FROM ZUBIRI