La commande CREATE ROLE permet de créer un rôle auquel sera affecté par la commande GRANT des privilèges.

Par la suite, des utilisateurs peuvent devenir membres d'un rôle et en conséquence hériter de l'ensemble des privilèges accordés à ce rôle.

Syntaxe sous Oracle
CREATE ROLE nom_rôle
  [
  NOT IDENTIFIED
  |
  IDENTIFIED
  {
       BY mot_passe 
       |
       USING [schéma .] package 
       |
       EXTERNALLY
       |
       GLOBALLY
  }
  ];

La clause NOT IDENTIFIED spécifie que le rôle est autorisé dans la base de données et qu'aucun mot de passe n'est nécessaire.

La clause IDENTIFIED indique qu'un utilisateur doit être autorisé par la méthode spécifiée avant que le rôle ne soit activé par l'instruction SET ROLE.

La clause BY mot_passe indique qu'un utilisateur est autorisé dans la base de données à condition qu'un mot de passe correct soit fourni afin d'activer le rôle.

La clause USING package permet de créer un rôle d'application, lequel est un rôle qui peut être activé seulemet par les applications en utilisant un package autorisé.

La clause EXTERNALLY indique la création d'un utilisateur externe qui doit être autorisé par un service externe avant l'activation du rôle.

La clause GLOBALLY indique la création d'un utilisateur global qui doit être autorisé à utiliser le rôle par le service de répertoire d'entreprise avant que le rôle ne soit activé.

Un rôle sous Oracle s'active en utilisant l'instruction SET ROLE.

SET ROLE
  {
  nom_rôle [IDENTIFIED BY mot_passe]
       [, nom_rôleN [IDENTIFIED BY mot_passe]]
  | ALL [EXCEPT nom_rôle [, nom_rôle]]
  | NONE
  };

La modification d'un rôle est accomplie par ALTER ROLE et la suppression par DROP ROLE.

ALTER ROLE nom_rôle
  {
   NOT IDENTIFIED
   |
  {
       BY mot_passe 
       |
       USING [schéma .] package 
       |
       EXTERNALLY
       |
       GLOBALLY
  }
  };

DROP ROLE nom_rôle;

L'attribution (GRANT) ou la révocation (REVOKE) d'un, plusieurs (ROLE) ou tous les rôles à l'exception de certain (ALL EXCEPT) à un utilisateur peut être faite par l'entremise de la commande ALTER USER.

ALTER USER nom_utilisateur [, nom_utilisateurN ]
{
  { GRANT | REVOKE } CONNECT THROUGH proxy
  WITH
  {
  {
       ROLE { nom_rôle [, nom_rôleN]
       |
       ALL EXCEPT nom_rôle [, nom_rôleN]
  }
  |
  NO ROLES
  };

La commande ALTER USER permet de même, d'attribuer un à plusieurs rôles par défaut à un seul utilisateur.

ALTER USER nom_utilisateur
  DEFAULT ROLE
  {
   { nom_rôle [, nom_rôleN] }
   | 
   { ALL [EXCEPT nom_rôle [, nom_rôleN]] }
   |
   NONE
  };
Syntaxe sous SQL Server

Le processus de création d'un rôle sous SQL Server différe puisqu'il est nécessaire de passer par une procédure stockée du système.

EXEC sp_addrole [ @rolename = ] 'nom_rôle'
  [ , [ @ownername = ] 'propriétaire' ]

L'ajout d'un membre à un rôle, s'effectue par l'intermédiaire d'une autre procédure stockée.

EXEC sp_addrolemember [ @rolename = ] 'nom_rôle' , 
  [ @membername = ] 'compte_sécurité'

La suppression d'un membre d'un rôle s'accomplit par sp_droprolemember.

sp_droprolemember [ @rolename = ] 'nom_rôle' , 
  [ @membername = ] 'compte_sécurité'

La suppression du rôle s'effectue par sp_droprole.

sp_droprole [ @rolename = ] 'nom_rôle'
Exemple
-- Sous Oracle
CREATE ROLE role_utilisateur;

CREATE ROLE role_developpeur IDENTIFIED GLOBALLY;

-- Sous SQL Server
EXEC sp_addrole 'role_developpeur', 'dbo'

-- Activation des rôles sous Oracle
SET ROLE role_developpeur, role_utilisateur;

-- Utilisation des rôles
GRANT SELECT, UPDATE ON uneTable TO role_utilisateur
GRANT ALL ON uneAutreTable TO role_developpeur

GRANT role_utilisateur TO id_utilisateur, id_utilisateur2
GRANT role_developpeur TO id_developpeur, id_developpeur2