Granting a Role to a User or to Another Role

You must register a role in the database before the role can be used in a GRANT statement. For more information, see CREATE ROLE statement.

A DBA has the authority to grant a new role to another user. If a user receives a role WITH GRANT OPTION, that user can grant the role to other users or to another role. Users keep a role that was granted to them until the REVOKE statement breaks the association between their login names and the role name.
Important: The CREATE ROLE and GRANT statements do not activate the role. A non-default role has no effect until SET ROLE enables it. The grantor or the grantee of a role can issue the SET ROLE statement.
The following example shows the actions required to grant and activate the role payables to a group of employees who perform account payable functions. First the DBA creates role payables, then grants it to maryf.
CREATE ROLE payables;
GRANT payables TO maryf WITH GRANT OPTION;
The DBA or maryf can activate the role with the following statement:
SET ROLE payables;
User maryf has the WITH GRANT OPTION authorization to grant payables to other employees who pay accounts.
GRANT payables TO charly, gene, marvin, raoul;
If you grant privileges for one role to another role, the recipient role has the combined set of privileges that have been granted to both roles. The following example grants the role petty_cash to the role payables:
CREATE ROLE petty_cash;
SET ROLE petty_cash;
GRANT petty_cash TO payables;
After all of these statements execute successfully, if user raoul uses the SET ROLE statement to make payables his current role, then (aside from the effects of any REVOKE operations) he holds the following combined set of access privileges:
  • The privileges granted to the payables role
  • The privileges granted to the petty_cash role
  • The privileges granted individually to raoul
  • The privileges granted to PUBLIC

If you attempt to grant a role to yourself, either directly or indirectly, the database server generates an error. (For an important exception to this rule, however, see the description of the DBSECADM Clause.)

The database server also generates an error if you include the WITH GRANT OPTION keywords in a GRANT statement that assigns a role to another role.