REVOKE(数据库权限)语句

REVOKE 语句的此格式将撤销应用于整个数据库的权限。

调用

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

权限

要撤销 ACCESSCTRL , CREATE_SECURE_OBJECT , DATAACCESS , DBADM 或 SECADM 权限,需要 SECADM 权限。
注: 在 Db2 11.1.4.6 安全性特殊构建 40997 和更高版本中,需要撤销 CREATE_EXTERNAL_ROUTINE 或 CREATE_NOT_FENCED_ROUTINE 权限, SYSADM , SECADM 或 ACCESSCTRL 权限。

要撤销其他权限,需要 ACCESSCTRL 或 SECADM 权限。

语法

读取语法图跳过可视语法图REVOKE,ACCESSCTRLBINDADDCONNECTCREATETABCREATE_EXTERNAL_ROUTINECREATE_NOT_FENCED_ROUTINECREATE_SECURE_OBJECTDBADMDATAACCESSEXPLAINIMPLICIT_SCHEMALOADQUIESCE_CONNECTSECADMSQLADMWLMADMON DATABASEFROM ,USERGROUPROLEauthorization-namePUBLIC BY ALL

描述

ACCESSCTRL
撤销授予和撤销大多数数据库权限和对象特权的权限。
BINDADD
撤销创建包的权限。 程序包的创建者自动对该程序包具有 CONTROL 特权,并且保留此特权,即使创建者的 BINDADD 权限稍后被撤销也是如此。

在不撤销 DBADM 权限的情况下,无法从具有 DBADM 权限的 authorization-name 撤销 BINDADD 权限。

CONNECT
撤销访问数据库的权限。

撤销用户的 CONNECT 权限不会影响向该用户授予的对数据库中对象的任何特权。 如果再次向用户授予 CONNECT 权限,那么所有先前拥有的特权仍有效 (假定未显式撤销这些特权)。

在不撤销 DBADM 权限的情况下,无法从具有 DBADM 权限的 authorization-name 撤销 CONNECT 权限 (SQLSTATE 42504)。

CREATETAB
撤销创建表的权限。 表的创建者自动对该表具有 CONTROL 特权,并且保留此特权,即使创建者的 CREATETAB 权限稍后被撤销也是如此。

在不撤销 DBADM 权限的情况下,无法从具有 DBADM 权限的 authorization-name 撤销 CREATETAB 权限 (SQLSTATE 42504)。

CREATE_EXTERNAL_ROUTINE
撤销注册外部例程的权限。 当注册外部例程时,它将继续存在,即使稍后从注册该例程的授权标识撤销 CREATE_EXTERNAL_ROUTINE 也是如此。

CREATE_EXTERNAL_ROUTINE authority cannot be revoked from an authorization-name holding DBADM or CREATE_NOT_FENCED_ROUTINE authority without also revoking DBADM or CREATE_NOT_FENCED_ROUTINE authority (SQLSTATE 42504).

CREATE_NOT_FENCED_ROUTINE
撤销注册在数据库管理器进程中运行的例程的权限。 当例程注册为未受防护时,它将以这种方式继续运行,即使稍后从注册该例程的授权标识撤销 CREATE_NOT_FENCED_ROUTINE 也是如此。

在不同时撤销 DBADM 权限的情况下,无法从具有 DBADM 权限的 authorization-name 撤销 CREATE_NOT_FENCED_ROUTINE 权限 (SQLSTATE 42504)。

CREATE_SECURE_OBJECT
撤销创建安全触发器和安全功能的权限。 撤销更改此类对象的安全属性的权限。
DATAACCESS
撤销访问数据的权限。
DBADM
撤销 DBADM 权限。

无法撤销 PUBLIC 的 DBADM 权限 (因为无法将其授予 PUBLIC)。

注意:
撤销 DBADM 权限不会自动撤销数据库中对象上的 authorization-name 所拥有的任何特权。
EXPLAIN
撤销解释,准备和描述静态和动态语句的权限,而无需访问数据。
IMPLICIT_SCHEMA
撤销隐式创建模式的权限。 这不会影响在现有模式中创建对象或处理 CREATE SCHEMA 语句的能力。

在不同时撤销 DBADM 权限的情况下,无法从具有 DBADM 权限的 authorization-name 撤销 IMPLICIT_SCHEMA 权限 (SQLSTATE 42504)。

LOAD
撤销此数据库中 LOAD 的权限。
QUIESCE_CONNECT
在数据库停顿时撤销访问该数据库的权限。
SECADM
撤销管理数据库安全性的权限。
SQLADM
撤销监视和调整 SQL 语句的权限。
WLMADM
撤销管理工作负载管理器对象的权限。
FROM
指示撤销权限的对象。
用户
指定 authorization-name 识别用户。
GROUP
指定 authorization-name 识别组名。
角色
指定 authorization-name 识别角色名称。
authorization-name , ...
列示一个或多个用户、组或角色的授权标识。

授权标识列表不能包含正在发出该语句的用户的授权标识 (SQLSTATE 42502)。

PUBLIC
撤销 PUBLIC 的权限。
BY ALL
撤销所有已显式授予这些特权的已命名用户的每个已命名特权,而不考虑授予这些特权的用户。 此行为是缺省行为。

规则

安全性管理员必需: 数据库必须至少具有一个具有 SECADM 权限的 USER 类型的授权标识。 不能从每个用户授权标识撤销 SECADM 权限 (SQLSTATE 42523)。

  • 对于指定的每个 authorization-name ,如果未指定 USER , GROUP 或 ROLE ,那么:
    • 对于 SYSCAT.DBAUTH 目录视图,其中被授予者是 authorization-name:
      • 如果所有行的 GRANTEETYPE 均为 "U" ,那么假定为 USER。
      • 如果所有行的 GRANTEETYPE 均为 "G" ,那么将采用 GROUP。
      • 如果所有行的 GRANTEETYPE 均为 "R" ,那么将采用 ROLE。
      • 如果所有行都不具有相同的 GRANTEETYPE 值,那么将返回错误 (SQLSTATE 56092)。

注意

  • 撤销特定特权并不一定会撤销完成任务的能力。 如果 PUBLIC ,组或角色 拥有其他特权,或者用户拥有更高级别的权限 (例如 DBADM) ,那么用户可以继续执行任务。
  • 语法替代方法: 为了与先前版本的 Db2® 和其他数据库产品兼容,支持以下语法替代方法。
    • 可以指定 CREATE_NOT_FENCED 以代替 CREATE_NOT_FENCED_ROUTINE。
    • 可以指定 SYSTEM 以代替 DATABASE。
    • 不包含从属特权可以指定为语法替代项。

示例

  • 示例 1: 鉴于 USER6 只是用户而不是组,请撤销从用户 USER6创建表的特权。
       REVOKE CREATETAB ON DATABASE FROM USER6
  • 示例 2: 从名为 D024的组撤销对数据库的 BINDADD 权限。 SYSCAT.DBAUTH 目录视图; 一个是 GRANTEETYPE 为 U 的目录视图,另一个是 GRANTEETYPE 为 G 的目录视图。
       REVOKE BINDADD ON DATABASE FROM GROUP D024
    在这种情况下,必须指定 GROUP 关键字; 否则,将发生错误 (SQLSTATE 56092)。
  • 示例 3: 撤销用户 Walid 的安全性管理员权限。
       REVOKE SECADM ON DATABASE FROM USER Walid
  • 示例 4: 具有 SECADM 权限的用户从用户 Haytham 撤销 CREATE_SECURE_OBJECT 权限。
       REVOKE CREATE_SECURE_OBJECT ON DATABASE FROM USER HAYTHAM