角色名称
仅 DBA 或通过 WITH GRANT OPTION 被授予了角色的用户可取消角色或其权限。用户不可取消自身的角色。
角色名称
元素 | 描述 | 限制 | 语法 |
role | 有这些属性之一的角色:
| 必须存在。如果括在引号之间,则 role 区分大小写。 | 所有者名称 |
紧跟在 REVOKE 关键字之后,role 的名称指定要从用户列表取消的角色。然而,在 FROM 关键字之后,role 的名称指定要从其取消访问权限(或另一角色)的角色。如果没有其他的 REVOKE 选项与 user 或 role 规范相冲突,则同一 FROM 子句可同时包括 user 和 role 名称。要从角色取消对角色的权限的语法是对 SQL 的 ANSI/ISO 标准的扩展。
当您在 REVOKE 语句的 FROM 关键字之后包括 role,则从那个角色取消指定的权限(或另一角色),但有那个角色的用户保留那些单独地授予给他们的任何权限或角色。
如果您将 role 括在引号之间,则该名称区分大小写,且完全按照您输入的形式存储。在符合 ANSI 的数据库中,如果您不使用引号作为定界符,则以大写字母形式存储 role。
当您取消以 WITH GRANT OPTION 关键字授予了用户的角色时,您同时取消该角色及授予它的选项。
下列示例展示 REVOKE role 的作用:
- 移除用户或从指定的角色中包含的项移除另一角色:
REVOKE accounting FROM mary;
REVOKE payroll FROM accounting;
- 从角色移除一个或多个访问权限:
REVOKE UPDATE ON employee FROM accounting;
当您从角色取消表级权限时,您不可包括 RESTRICT 或 CASCADE 关键字。
取消缺省的角色
DBA 或数据库的所有者可以 GRANT DEFAULT ROLE 语句为一个或多个用户或为 PUBLIC 定义缺省的角色。不同于非缺省的角色,当用户连接到数据库时,缺省的角色自动地生效。直到 SET ROLE 语句激活该角色,非缺省的角色才生效。缺省的角色可为被授予了那个缺省的角色的所有用户指定一系列访问权限。相反地,REVOKE DEFAULT ROLE 语句为指定的 user-list 取消当前的缺省的角色作为缺省的角色,如下列程序片段所示:
CREATE ROLE accounting;
GRANT USAGE ON LANGUAGE SPL TO accounting;
GRANT ALL PRIVILEGES ON receivables TO accounting;
GRANT DEFAULT ROLE accounting TO mary;
. . .
REVOKE DEFAULT ROLE FROM mary;
最后的语句从用户 mary 移除任何她仅通过她的缺省的角色所持有的任何访问权限。在此示例中,该缺省的角色为 accounting,但由于在给定的时间点对于单个用户(或 PUBLIC 组)可仅有一个角色,所以在 REVOKE DEFAULT ROLE 语句中不指定缺省的角色的名称。如果 mary 发出 SET ROLE DEFAULT 语句,则直到授予他某新的缺省的角色之后,它才会有效。
在您执行指定一个或多个用户或 PUBLIC 的 REVOKE DEFAULT ROLE 之后,仅通过缺省的用户,才能取消那些用户持有的任何权限。(但此语句不取消单独地授予了用户的任何权限,或通过另一角色授予了用户的权限,或 PUBLIC 持有的权限。)
在 REVOKE DEFAULT ROLE 成功地取消 user 的缺省的角色之后,user 的缺省的角色成为 NULL,且从系统目录移除该缺省的角色信息。(在此上下文中,NULL 与 NONE 是同义词。)
如果 REVOKE DEFAULT ROLE 指定尚未授予缺省的角色的用户,则不发出警告。
除了 user-list 之外,在 REVOKE DEFAULT ROLE 语句中的 FROM 关键字之后的选项都无效。
取消 EXTEND 角色
REVOKE EXTEND FROM user-list 语句取消指定用户的 EXTEND 角色。在启用 IFX_EXTEND_ROLE 配置参数的数据库中,取消此角色防止指定的用户创建或删除外部 UDR。用户是否持有 EXTEND 角色对创建或删除以 SPL 语言编写的 UDR 没有作用。
仅数据库服务器管理员(DBSA),缺省为用户 gbasedbt,可通过发出 GRANT EXTEND TO user-list 语句将内建的 EXTEND 角色授予一个或多个用户或授予 PUBLIC。(由于 EXTEND 为内建的角色,因此持有它的用户不需要以 SET ROLE 语句激活它,且 DROP ROLE 语句不可销毁 EXTEND 角色。)
如果 IFX_EXTEND_ROLE 配置参数设置为 ON 或为 1,则不持有 EXTEND 角色的用户不可创建或删除以 C 或 Java™ 语言编写的 UDR,这两种语言都支持共享库。下列示例从用户 max 取消 EXTEND 角色:
REVOKE EXTEND FROM 'max';
这防止用户 max 创建或删除外部的 UDR,即使 max 为它后续试图删除的那个 UDR 的所有者。
在不需要此安全特性的数据库中,DBSA 可通过设置 ONCONFIG 文件中的 IFX_EXTEND_ROLE 参数为 OFF 或为 0 来禁用对可创建或删除外部的 UDR 的用户的限制。但不论启用或禁用 IFX_EXTEND_ROLE,创建或删除外部的 UDR 的用户还必须持有下列访问权限:
- 对在其中注册 UDR 的数据库的 Resource 权限或 DBA 权限。
- 对以其编写 UDR 的外部编程语言的 Usage 权限。
要获取关于 Resource 权限的信息,请参阅 数据库级权限。要获取 SQL 的 GRANT USAGE ON LANGUAGE C 和 GRANT USAGE ON LANGUAGE JAVA 的语法,请参阅 语言级权限。