授予缺省的角色

DBA 或数据库的所有者(缺省情况下,用户 gbasedbt)可以 GRANT DEFAULT ROLE 语句为一个或多个用户,或为 PUBLIC 定义缺省的角色。当该用户连接到数据库时,激活一个缺省的角色。不需要 SET ROLE 语句来激活缺省的角色。

如果用户通过客户端应用访问数据库,该应用不可更改访问权限也不可设置角色,则缺省的角色非常有用。

缺省的角色可为被分配了那个角色的所有用户指定一系列访问权限,如下列示例中所示:
CREATE ROLE accounting;
GRANT ALTER, INSERT, SELECT ON stock TO accounting;
GRANT DEFAULT ROLE accounting TO mary, asok, vlad;

最后的语句提供给用户 maryasokvladaccounting 作为他们的缺省的角色。如果这些用户中的任何人连接到数据库,则那个用户激活 accounting 角色持有的任何权限,除了用户作为个别用户或作为 PUBLIC 已经拥有的任何角色之外。

该角色必须已经存在,且该用户必须有访问权限来设置该角色。如果先前不曾将该角色授予用户,它会被作为设置缺省的角色的一部分被授予。

如果既未为用户也未为 PUBLIC 定义缺省的角色,那么不设置角色,且用户的现有权限有效。

下列示例展示缺省的角色是如何可分配给所有用户的:
DATABASE hrdb;
CREATE ROLE emprole;
GRANT CONNECT TO PUBLIC;
GRANT SELECT ON emptab TO emprole;
GRANT emprole TO PUBLIC;
GRANT DEFAULT ROLE emprole TO PUBLIC;
注: 使用 GRANT DEFAULT ROLE 是在 sysdbopen( ) 过程中发出 SET ROLE 语句的一种备用方法。然而,当用户建立连接时,使用 sysdbopen( ) 过程定义的缺省的角色优先于任何其他角色。

为用户或为 PUBLIC 更改缺省的角色仅影响新的数据库连接。在当前分配的角色之下,现有的连接继续运行。如果将缺省的角色授予了 user,且另一缺省的角色授予了 PUBLIC,则在连接的时候,授予 user 的缺省的角色优先。

不可将缺省的角色分配给另一角色。因为角色不是跨数据库定义的,必须为每一数据库分配缺省的角色。在 GRANT DEFAULT ROLE 语句中的 TO 关键字之后,除了 user-list 之外没有有效的选项。如果您尝试包括 AS grantor 子句或 WITH GRANT OPTION 子句,则数据库服务器发出错误。