GRANT (Transact-SQL)

S’applique à : SQL Server (toutes les versions prises en charge) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Accorde des autorisations à un principal sur un élément sécurisable. Le concept général est GRANT <une autorisation> ON <un objet> TO < un utilisateur, une connexion ou un groupe>. Pour obtenir une présentation générale des autorisations, consultez Autorisations (Moteur de base de données).

Article link iconConventions de la syntaxe Transact-SQL

Syntaxe

-- Syntax for SQL Server and Azure SQL Database  
  
-- Simplified syntax for GRANT  
GRANT { ALL [ PRIVILEGES ] }  
      | permission [ ( column [ ,...n ] ) ] [ ,...n ]  
      [ ON [ class :: ] securable ] TO principal [ ,...n ]   
      [ WITH GRANT OPTION ] [ AS principal ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
GRANT
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

ALL
Cette option est déconseillée mais maintenue uniquement pour la compatibilité descendante. Elle n'accorde pas toutes les autorisations possibles. Elle revient à accorder les autorisations suivantes :

  • Si l'élément sécurisable est une base de données, ALL représente BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE et CREATE VIEW.

  • Si l'élément sécurisable est une fonction scalaire, ALL représente EXECUTE et REFERENCES.

  • Si l'élément sécurisable est une fonction table, ALL représente DELETE, INSERT, REFERENCES, SELECT et UPDATE.

  • Si l'élément sécurisable est une procédure stockée, ALL représente EXECUTE.

  • Si l'élément sécurisable est une table, ALL représente DELETE, INSERT, REFERENCES, SELECT et UPDATE.

  • Si l'élément sécurisable est une vue, ALL représente DELETE, INSERT, REFERENCES, SELECT et UPDATE.

PRIVILEGES
Inclus pour la conformité aux normes ISO. Ne change pas le comportement de l'option ALL.

permission
Nom d'une autorisation. Les mappages valides des autorisations aux éléments sécurisables sont décrits dans les sous-rubriques qui suivent.

column
Spécifie le nom de la colonne d'une table à laquelle les autorisations s'appliquent. Les parenthèses () sont requises.

class
Indique la classe de l'élément sécurisable sur laquelle l'autorisation est accordée. Le qualificateur d’étendue :: est obligatoire.

securable
Indique l'élément sécurisable sur lequel l'autorisation est accordée.

TO principal
Nom d’un principal. Les principaux auxquels il est possible d'accorder des autorisations sur un élément sécurisable varient en fonction de l'élément sécurisable. Consultez les sous-rubriques ci-dessous pour connaître les combinaisons acceptées.

GRANT OPTION
Indique que le détenteur de l'autorisation a également la possibilité d'accorder l'autorisation spécifiée à d'autres principaux.

AS principal
Utilisez la clause AS principal pour indiquer que le principal enregistré comme entité accordant l’autorisation doit être un principal autre que la personne qui exécute l’instruction. Supposez par exemple que l’utilisateur Mary est le principal_id 12 et que l’utilisateur Raul est le principal 15. Mary exécute GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;. Maintenant, la table sys.database_permissions indique que le grantor_prinicpal_id était 15 (Raul), même si l’instruction a été exécutée par l’utilisateur 13 (Mary).

L’utilisation de la clause AS n’est généralement pas recommandé, sauf si vous devez définir explicitement la chaîne d’autorisation. Pour plus d’informations, consultez la section Synthèse sur l’algorithme de vérification des autorisations de la rubrique Autorisations (moteur de base de données).

L’utilisation de AS dans cette instruction n’implique pas la possibilité d’emprunter l’identité d’un autre utilisateur.

Notes

La syntaxe complète de l'instruction GRANT est complexe. Le diagramme de syntaxe ci-dessus a été simplifié pour attirer l'attention sur sa structure. La syntaxe complète d’accord des autorisations sur des éléments sécurisables particuliers est décrite dans les articles ci-dessous.

L'instruction REVOKE peut s'utiliser pour supprimer des autorisations accordées et l'instruction DENY pour empêcher un principal d'obtenir une autorisation particulière au moyen d'une instruction GRANT.

L'accord d'une autorisation supprime l'option DENY ou REVOKE de cette autorisation sur l'élément sécurisable spécifié. Si la même autorisation est refusée dans une étendue plus élevée qui contient l'élément sécurisable, l'option DENY est prioritaire. Cependant, la révocation de l'autorisation accordée dans une étendue plus élevée n'est pas prioritaire.

Les autorisations au niveau base de données sont accordées sur l'étendue de la base de données spécifiée. Si un utilisateur a besoin d'autorisations sur des objets dans une autre base de données, créez le compte de l'utilisateur dans cette autre base de données ou autorisez le compte de l'utilisateur à accéder à la fois à cette autre base de données et à la base de données active.

Attention

Une instruction DENY de niveau table n'a pas la priorité sur une instruction GRANT de niveau colonne. Cette incohérence dans la hiérarchie des autorisations a été conservée pour des raisons de compatibilité descendante. Elle sera supprimée dans une version ultérieure.

La procédure système stockée sp_helprotect répertorie les autorisations sur un élément sécurisable au niveau base de données.

WITH GRANT OPTION

GRANT ... WITH GRANT OPTION spécifie que le principal de sécurité qui reçoit l’autorisation peut accorder l’autorisation spécifiée à d’autres comptes de sécurité. Quand le principal qui reçoit l’autorisation est un rôle ou un groupe Windows, la clause AS doit être utilisée si l’autorisation d’objet doit être accordée à des utilisateurs qui ne sont pas membres du groupe ou du rôle. Étant donné que seul un utilisateur, et non un groupe ou un rôle, peut exécuter une instruction GRANT, un membre spécifique du groupe ou du rôle doit utiliser la clause AS pour appeler explicitement l’appartenance au rôle ou au groupe quand il accorde l’autorisation. L’exemple suivant montre comment la clause WITH GRANT OPTION est utilisée quand elle est accordée à un rôle ou à un groupe Windows.

-- Execute the following as a database owner  
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION;  
EXEC sp_addrolemember TesterRole, User1;  
-- Execute the following as User1  
-- The following fails because User1 does not have the permission as the User1  
GRANT EXECUTE ON TestMe TO User2;  
-- The following succeeds because User1 invokes the TesterRole membership  
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;  

Graphique des autorisations SQL Server

Pour obtenir un graphique de la taille d’une affiche de toutes les autorisations du Moteur de base de données au format PDF, consultez https://aka.ms/sql-permissions-poster.

Autorisations

Le fournisseur d'autorisations (ou le principal spécifié avec l'option AS) doit posséder l'autorisation elle-même avec l'option GRANT OPTION ou une autorisation plus élevée qui implique l'autorisation accordée. En cas d'utilisation de l'option AS, d'autres critères s'appliquent. Pour plus d’informations, consultez l’article sur les éléments sécurisables.

Les propriétaires d'objets peuvent accorder des autorisations sur les objets qu'ils possèdent. Les principaux ayant l'autorisation CONTROL sur un élément sécurisable peuvent accorder une autorisation sur cet élément.

Les détenteurs de l'autorisation CONTROL SERVER, tels que les membres du rôle serveur fixe sysadmin, peuvent accorder une autorisation sur n'importe quel élément sécurisable du serveur. Les bénéficiaires de l'autorisation CONTROL sur une base de données, tels que les membres du rôle de base de données fixe db_owner, peuvent accorder une autorisation quelconque sur tout élément sécurisable inclus dans la base de données. Les détenteurs de l'autorisation CONTROL sur un schéma peuvent accorder une autorisation sur n'importe quel objet dans ce schéma.

Exemples

Le tableau suivant répertorie les éléments sécurisables et les articles qui décrivent leur syntaxe.

Élément sécurisable Syntaxe GRANT
Rôle d'application GRANT – octroi d'autorisations de principal de base de données (Transact-SQL)
Assembly GRANT - Autorisations sur un assembly (Transact-SQL)
Clé asymétrique GRANT - Autorisations de clé asymétrique (Transact-SQL)
Groupe de disponibilité GRANT (Octroi d'autorisations de groupe de disponibilité) (Transact-SQL)
Certificat Autorisations de certificat GRANT (Transact-SQL)
Contrat GRANT - Autorisations sur Service Broker (Transact-SQL)
Base de données GRANT – octroi d'autorisations de base de données (Transact-SQL)
Informations d’identification délimitées à la base de données GRANT - Octroyer des autorisations sur les informations d’identification délimitées à la base de données (Transact-SQL)
Point de terminaison GRANT – octroi d'autorisations de point de terminaison (Transact-SQL)
Catalogue de texte intégral GRANT - Autorisations relatives au texte intégral (Transact-SQL)
Liste de mots vides de texte intégral GRANT - Autorisations relatives au texte intégral (Transact-SQL)
Fonction Autorisations d'objet GRANT (Transact-SQL)
Connexion GRANT – octroi d'autorisations de principal de serveur (Transact-SQL)
Type de message GRANT - Autorisations sur Service Broker (Transact-SQL)
Object Autorisations d'objet GRANT (Transact-SQL)
File d'attente Autorisations d'objet GRANT (Transact-SQL)
Liaisons de service distant GRANT - Autorisations sur Service Broker (Transact-SQL)
Role GRANT – octroi d'autorisations de principal de base de données (Transact-SQL)
Routage GRANT - Autorisations sur Service Broker (Transact-SQL)
schéma GRANT - Autorisations sur un schéma (Transact-SQL)
Liste de propriétés de recherche Autorisations de liste de propriétés de recherche GRANT (Transact-SQL)
Serveur GRANT – octroi d'autorisations de serveur (Transact-SQL)
Service GRANT - Autorisations sur Service Broker (Transact-SQL)
Procédure stockée Autorisations d'objet GRANT (Transact-SQL)
Clé symétrique GRANT – octroi d'autorisations de clé symétrique (Transact-SQL)
Synonyme Autorisations d'objet GRANT (Transact-SQL)
Objets système GRANT – octroi d'autorisations d'objet système (Transact-SQL)
Table de charge de travail Autorisations d'objet GRANT (Transact-SQL)
Type GRANT – octroi d'autorisations de type (Transact-SQL)
Utilisateur GRANT – octroi d'autorisations de principal de base de données (Transact-SQL)
Affichage Autorisations d'objet GRANT (Transact-SQL)
Collection de schémas XML GRANT – octroi d'autorisations de collection de schémas XML (Transact-SQL)

Voir aussi