REVOKE(数据库权限)语句
REVOKE 语句的此格式将撤销应用于整个数据库的权限。
调用
此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。
权限
要撤销其他权限,需要 ACCESSCTRL 或 SECADM 权限。
语法
描述
- 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)。
- 对于 SYSCAT.DBAUTH 目录视图,其中被授予者是 authorization-name:
注意
- 撤销特定特权并不一定会撤销完成任务的能力。 如果 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 的目录视图。
在这种情况下,必须指定 GROUP 关键字; 否则,将发生错误 (SQLSTATE 56092)。REVOKE BINDADD ON DATABASE FROM GROUP D024 - 示例 3: 撤销用户 Walid 的安全性管理员权限。
REVOKE SECADM ON DATABASE FROM USER Walid - 示例 4: 具有 SECADM 权限的用户从用户 Haytham 撤销 CREATE_SECURE_OBJECT 权限。
REVOKE CREATE_SECURE_OBJECT ON DATABASE FROM USER HAYTHAM
