La commande GRANT permet d'attribuer un ou plusieurs privilèges à un utilisateur ou un rôle sur des instructions (create database, create table, create view, etc.) ou divers objets tels que des tables, des vues, des colonnes ou encore des procédures stockées.

Syntaxe sous SQL Server
GRANT 
{
  {
  { ALL | instruction [ ,...n ] } 
  TO compte_sécurité [ ,...n ] 
  }
  |
  {
  { ALL [ PRIVILEGES ] | permission [ ,...n ] } 
  { 
        [ ( nom_colonne [ ,...n ] ) ] ON { nom_table | nom_vue } 
        | ON { nom_table | nom_vue } [ ( nom_colonne [ ,...n ] ) ] 
        | ON { procédure_stockée | procédure_étendue } 
        | ON { fonction_utilisateur }
  } 
  TO compte_sécurité [ ,...n ] 
  [ WITH GRANT OPTION ] 
  [ AS { groupe | rôle } ] 
  }
}

Les clauses TO et FROM indiquent la liste des comptes de sécurité.

La cause ALL indique l'attribution de toutes les autorisations possibles pour le compte de sécurité indiqué.

La clause PRIVILEGES est facultative. En fait elle n'est inclus que pour se conformer aux spécifications SQL-92.

La clause ON indique l'application des autorisations à un objet indiqué.

La commande WITH GRANT OPTION indique la possibilité pour le compte de sécurité de pouvoir lui-même accorder des autorisations à d'autres utilisateurs.

La clause AS {groupe | rôle} indique le nom facultatif d'un groupe ou d'un rôle pour lequel les autorisations seront accordées.

Syntaxe sous Oracle
GRANT
{
  {
  { système_privilège | rôle | ALL PRIVILEGES }
       [, { système_privilègeN | rôle | ALL PRIVILEGES }]
  TO
      {
        { utilisateur | rôle | PUBLIC }
         [, { utilisateurN | rôle | PUBLIC }]
      }
  [IDENTIFIED BY mot_passe] [WITH ADMIN OPTION]
  }
  |
  {
  { objet_privilège | ALL [PRIVILEGES] }
       [( nom_colonne [, nom_colonne]... )]
  [, { objet_privilègeN | ALL [PRIVILEGES] }
       [( nom_colonne [, nom_colonneN]... )]]
  ON
  {
       { schema . objet }
       |
       {
         { DIRECTORY nom_répertoire }
         |
         { JAVA { SOURCE | RESOURCE } [schéma .] objet }
       }
  }
  TO
  {
       { utilisateur | rôle | PUBLIC }
        [, { utilisateurN | rôle | PUBLIC }]
  }
  [WITH GRANT OPTION] [WITH HIERARCHY OPTION]
  }
};

La clause IDENTIFIED BY permet d'identifier un utilisateur existant par un mot de passe ou pour créer un utilisateur inexistant.

La clause WITH ADMIN OPTION fournit à un utilisateur la possibilité d'administrer un rôle.

La cause ALL PRIVILEGES indique l'attribution de toutes les autorisations appliquées au compte de sécurité indiqué.

L'option PUBLIC indique l'attribution de privilèges ou de rôles à tous les utilisateurs.

La clause ON indique l'application des autorisations sur un objet indiqué.

La clause DIRECTORY indique l'objet DIRECTORY sur lequel les privilèges doivent être accordés.

La clause JAVA { SOURCE | RESOURCE } permet de spécifier une source Java ou l'objet de schéma de ressource sur lequel les privilèges doivent être accordés.

La clause FROM indique la liste des comptes de sécurité.

La clause TO indique la liste des comptes de sécurité.

La commande WITH GRANT OPTION indique la possibilité pour le compte de sécurité de pouvoir lui-même accorder des privilèges à d'autres utilisateurs.

La clause WITH HIERARCHY OPTION indique la permission d'étendre les privilèges d'objets spécifiés à tous les sous-objets.

Exemple
-- Permissions sur des instructions
GRANT
  CREATE PROCEDURE,
  CREATE ANY PROCEDURE,
  ALTER ANY PROCEDURE,
  DROP ANY PROCEDURE,
  EXECUTE ANY PROCEDURE
  TO developpeur
  WITH ADMIN OPTION;

-- Permissions sur des objets
GRANT INSERT, UPDATE, DELETE
ON tbl_produit
TO 'jk_fort', 'f_troyes'

GRANT 
                     DELETE,
                     INSERT,
                     SELECT,
                     UPDATE,
                     ALTER
ON tbl_administration TO a_frederic, a_lucie

GRANT ALL ON tbl_administration TO a_jeanpierre, a_luciola

GRANT SELECT ON tbl_livres TO invite