在 GRANT 语句中可使用角色之前,您必须在数据库中注册角色。要获取更多信息,请参阅 CREATE ROLE 语句。
DBA 有权限将新角色授予另一用户。如果用户得到角色 WITH GRANT OPTION,则那个用户可将该角色授予其他用户或另一角色。用户保持授予他们的角色,直到
REVOKE
语句将他们的登录名与此角色名称的关联中断。
Important: CREATE ROLE 和 GRANT
语句不激活角色。非缺省的角色不起作用,直到 SET ROLE 启用它。角色的授予者和被授予者可发出 SET ROLE 语句。
下列示例展示将
payables 角色授予或激活给执行应付账款功能的员工组所需要的操作。首先,DBA 创建角色
payables,然后将它授予
maryf。
CREATE ROLE payables;
GRANT payables TO maryf WITH GRANT OPTION;
DBA 或
maryf 可以下列语句激活该角色:
SET ROLE payables;
用户
maryf 有 WITH GRANT OPTION 权限来将
payables 授予其他支付账款的员工。
GRANT payables TO charly, gene, marvin, raoul;
如果您将一个角色授予权限给另一角色,则接受的角色具有已经授予给两个角色的权限的组合集。下列示例将角色
petty_cash 授予角色
payables:
CREATE ROLE petty_cash;
SET ROLE petty_cash;
GRANT petty_cash TO payables;
在成功地执行所有这些语句之后,如果用户
raoul 使用 SET ROLE 语句来将
payables 作为其当前角色,那么(任何 REVOKE 操作的作用除外)他持有下列访问权限的组合集:
- 授予 payables 角色的权限
- 授予 petty_cash 角色的权限
- 单个地授予 raoul 的权限
- 授予 PUBLIC 的权限
如果您尝试将角色授予自己,或者直接地或者间接地,数据库服务器都会生成错误。(然而,如果要获取对此规则的重要例外的信息,请参阅 DBSECADM 子句 的描述。)
如果您在将角色分配给另一角色的 GRANT 语句中包括 WITH GRANT OPTION 关键字,则数据库服务器还生成错误。