GRANT (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Accorde des autorisations à un principal sur un élément sécurisable. Le concept général est de GRANT <some permission> ON <some object> TO <some user, login, or group>
. Pour obtenir une présentation générale des autorisations, consultez Autorisations (Moteur de base de données).
Conventions de la syntaxe Transact-SQL
Syntaxe
Syntaxe pour SQL Server et 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 ]
Syntaxe pour Azure Synapse Analytics et Parallel Data Warehouse et Microsoft Fabric.
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
}
Arguments
ALL
Cette option est déconseillée mais maintenue uniquement pour la compatibilité descendante. Il n’accorde pas toutes les autorisations possibles. L’octroi ALL
équivaut à accorder les autorisations suivantes.
Élément sécurisable | autorisations |
---|---|
Base de données | BACKUP DATABASE , , BACKUP LOG , CREATE DEFAULT CREATE DATABASE , CREATE FUNCTION , CREATE PROCEDURE , CREATE RULE , CREATE TABLE , etCREATE VIEW |
Fonction scalaire | EXECUTE et REFERENCES |
Fonction table | DELETE , INSERT , REFERENCES , SELECT et UPDATE |
Procédure stockée | EXECUTE |
Table | DELETE , INSERT , REFERENCES , SELECT et UPDATE |
Affichage | DELETE , INSERT , REFERENCES , SELECT et UPDATE |
PRIVILEGES
Inclus pour la conformité aux normes ISO. Ne modifie pas le comportement de ALL
.
permission
Nom d’une autorisation. Les mappages valides des autorisations aux éléments sécurisables sont décrits dans les sections suivantes.
column
Spécifie le nom de la colonne d'une table à laquelle les autorisations s'appliquent. Les parenthèses et )
sont requises(
.
class
Indique la classe de l'élément sécurisable sur laquelle l'autorisation est accordée. Le qualificateur ::
d’étendue est requis.
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 sections suivantes pour connaître les combinaisons valides.
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 AS <principal>
clause pour indiquer que le principal enregistré en tant que bénéficiaire de l’autorisation doit être un principal autre que la personne exécutant l’instruction. Par exemple, présumez que l’utilisateur Mary
a un 12
principal_id
de , et l’utilisateur Raul
est principal 15
. Mary exécute GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Maintenant la sys.database_permissions
table indique que l’instruction grantor_prinicpal_id
a été 15
(Raul
) même si l’instruction a été exécutée par l’utilisateur 12
(Mary
).
L’utilisation de la AS
clause n’est généralement pas recommandée, sauf si vous devez définir explicitement la chaîne d’autorisations. Pour plus d’informations, consultez Résumé de l’algorithme de vérification des autorisations.
L’utilisation de AS
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 précédent a été simplifié pour attirer l’attention sur sa structure. La syntaxe complète pour accorder des autorisations sur des éléments sécurisables spécifiques est décrite dans les articles répertoriés plus loin dans cet article.
L’instruction REVOKE
peut être utilisée pour supprimer des autorisations accordées, et l’instruction DENY
peut être utilisée pour empêcher un principal d’obtenir une autorisation spécifique via un GRANT
.
L’octroi d’une autorisation supprime DENY
ou REVOKE
de cette autorisation sur l’élément sécurisable spécifié. Si la même autorisation est refusée à une étendue supérieure qui contient l’élément sécurisable, elle DENY
est prioritaire. Mais la révocation de l’autorisation accordée à 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
Un niveau DENY
table n’est pas prioritaire sur un niveau GRANT
de 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 sp_helprotect
procédure stockée système signale des autorisations sur un élément sécurisable au niveau de la base de données.
Dans Microsoft Fabric, CREATE USER
ne peut pas être exécuté explicitement actuellement. Quand GRANT
ou DENY
est exécuté, l’utilisateur est créé automatiquement.
WITH GRANT OPTION
Spécifie GRANT ... WITH GRANT OPTION
que le principal de sécurité recevant l’autorisation est autorisé à accorder l’autorisation spécifiée à d’autres comptes de sécurité. Lorsque le principal qui reçoit l’autorisation est un rôle ou un groupe Windows, la AS
clause doit être utilisée lorsque l’autorisation d’objet doit être accordée aux utilisateurs qui ne sont pas membres du groupe ou du rôle. Étant donné que seul un utilisateur, plutôt qu’un groupe ou un rôle, peut exécuter une GRANT
instruction, un membre spécifique du groupe ou du rôle doit utiliser la AS
clause pour appeler explicitement l’appartenance au rôle ou au groupe lors de l’octroi de l’autorisation. L’exemple suivant montre comment l’utilisation WITH GRANT OPTION
est utilisée lorsqu’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 TestProc TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc TO User2 AS TesterRole;
Graphique des autorisations SQL Server
Pour obtenir un graphique de taille d’affiche de toutes les autorisations Moteur de base de données au format PDF, consultez https://aka.ms/sql-permissions-poster.
autorisations
Le bénéficiaire (ou le principal spécifié avec l’option AS
) doit avoir l’autorisation elle-même avec GRANT OPTION
, ou une autorisation supérieure qui implique l’autorisation accordée. Si vous utilisez l’option, des exigences supplémentaires s’appliquent AS
. 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 disposant CONTROL
d’une autorisation sur un élément sécurisable peuvent accorder l’autorisation sur cet élément sécurisable.
Les bénéficiaires d’autorisations CONTROL SERVER
, tels que les membres du rôle serveur fixe sysadmin , peuvent accorder n’importe quelle autorisation sur n’importe quel élément sécurisable sur le serveur. Les bénéficiaires d’autorisations sur une base de CONTROL
données, tels que les membres du rôle de base de données fixe db_owner , peuvent accorder n’importe quelle autorisation sur n’importe quelle sécurisable dans la base de données. Les bénéficiaires d’autorisations CONTROL
sur un schéma peuvent accorder n’importe quelle autorisation sur n’importe quel objet du schéma.
Exemples
Le tableau suivant répertorie les éléments sécurisables et les articles qui décrivent leur syntaxe.