GRANT - Autorisations sur un schéma (Transact-SQL)

Accorde des autorisations sur un schéma.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name
    TO database_principal [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS granting_principal ]

Arguments

  • permission
    Spécifie une autorisation qu'il est possible d'accorder sur un schéma. Pour obtenir la liste des autorisations, consultez la section Notes plus loin dans cette rubrique.

  • ON SCHEMA :: schema_name
    Indique le schéma sur lequel l'autorisation est accordée. Le qualificateur d'étendue :: est requis.

  • database_principal
    Spécifie le principal auquel l'autorisation est accordée. Il peut s'agir :

    • d'un utilisateur de base de données ;

    • d'un rôle de base de données ;

    • d'un rôle d'application ;

    • d'un utilisateur de base de données mappé sur une connexion Windows ;

    • d'un utilisateur de base de données mappé sur un groupe Windows ;

    • d'un utilisateur de base de données mappé sur un certificat ;

    • d'un utilisateur de base de données mappé sur une clé asymétrique ;

    • d'un utilisateur de base de données qui n'est pas mappé sur le principal d'un serveur.

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

  • AS granting_principal
    Spécifie un principal dont le principal qui exécute cette requête dérive son droit d'accorder l'autorisation. Il peut s'agir :

    • d'un utilisateur de base de données ;

    • d'un rôle de base de données ;

    • d'un rôle d'application ;

    • d'un utilisateur de base de données mappé sur une connexion Windows ;

    • d'un utilisateur de base de données mappé sur un groupe Windows ;

    • d'un utilisateur de base de données mappé sur un certificat ;

    • d'un utilisateur de base de données mappé sur une clé asymétrique ;

    • d'un utilisateur de base de données qui n'est pas mappé sur le principal d'un serveur.

Notes

Important

Dans certains cas, une combinaison d'autorisations ALTER et REFERENCE pourrait autoriser le bénéficiaire des autorisations à afficher des données ou à exécuter des fonctions non autorisées. Par exemple, un utilisateur disposant d'une autorisation ALTER sur une table et d'une autorisation REFERENCE sur une fonction peut créer une colonne calculée sur une fonction et l'exécuter. Dans ce cas, l'utilisateur doit également disposer d'une autorisation SELECT sur la colonne calculée.

Un schéma est un élément sécurisable au niveau base de données contenu dans la base de données parente dans la hiérarchie des autorisations. Les autorisations les plus particulières et les plus limitées qu'il est possible d'accorder sur un schéma sont mentionnées ci-dessous, ainsi que les autorisations plus générales qui les englobent implicitement.

Autorisation de schéma

Impliquée par une autorisation de schéma

Impliquée par une autorisation de base de données

CONTROL

CONTROL

CONTROL

TAKE OWNERSHIP

CONTROL

CONTROL

ALTER

CONTROL

ALTER ANY SCHEMA

EXECUTE

CONTROL

EXECUTE

INSERT

CONTROL

INSERT

DELETE

CONTROL

DELETE

UPDATE

CONTROL

UPDATE

SELECT

CONTROL

SELECT

REFERENCES

CONTROL

REFERENCES

VIEW CHANGE TRACKING

CONTROL

CONTROL

VIEW DEFINITION

CONTROL

VIEW DEFINITION

AttentionAttention

Un utilisateur bénéficiant de l'autorisation ALTER sur un schéma peut utiliser un chaînage des propriétés pour accéder à des éléments sécurisables dans d'autres schémas, notamment à ceux dont l'accès lui est explicitement refusé. En effet, le chaînage des propriétés passe outre les vérifications d'autorisations sur les objets référencés si le principal auquel ils appartiennent possède les objets qui font référence à ceux-ci. Un utilisateur bénéficiant de l'autorisation ALTER sur un schéma peut créer des procédures, des synonymes et des vues détenus par le propriétaire du schéma. Ces objets ont accès (via le chaînage des propriétés) aux informations dans les autres schémas détenus par le propriétaire du schéma. Dans la mesure du possible, vous devez éviter d'accorder l'autorisation ALTER sur un schéma dont le propriétaire possède d'autres schémas.

Par exemple, vous pouvez rencontrer ce problème dans les scénarios suivants. Ces scénarios supposent qu'un utilisateur, en l'occurrence U1, bénéficie de l'autorisation ALTER sur le schéma S1. L'utilisateur U1 n'est pas autorisé à accéder à un objet table, en l'occurrence T1, dans le schéma S2. Les schémas S1 et S2 sont détenus par le même propriétaire.

L'utilisateur U1 bénéficie de l'autorisation CREATE PROCEDURE sur la base de données et de l'autorisation EXECUTE sur le schéma S1. Par conséquent, l'utilisateur U1 peut créer une procédure stockée, puis accéder à l'objet refusé T1 dans la procédure stockée.

L'utilisateur U1 bénéficie de l'autorisation CREATE SYNONYM sur la base de données et de l'autorisation SELECT sur le schéma S1. Par conséquent, l'utilisateur U1 peut créer un synonyme dans le schéma S1 pour l'objet refusé T1, puis accéder à cet objet à l'aide du synonyme.

L'utilisateur U1 bénéficie de l'autorisation CREATE VIEW sur la base de données et de l'autorisation SELECT sur le schéma S1. Par conséquent, l'utilisateur U1 peut créer une vue dans le schéma S1 pour interroger les données de l'objet refusé T1, puis accéder à cet objet à l'aide de la vue.

Pour plus d'informations, consultez l'article 914847de la Base de connaissances Microsoft.

Autorisations

Le fournisseur de l'autorisation (ou le principal spécifié avec l'option AS) doit lui-même posséder l'autorisation avec GRANT OPTION ou une autorisation plus élevée qui implique l'autorisation accordée.

En cas d'utilisation de l'option AS, ces critères s'appliquent.

AS granting_principal

Autres autorisations nécessaires

Utilisateur de base de données

Autorisation IMPERSONATE sur l'utilisateur, appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Utilisateur de base de données mappé sur une connexion Windows

Autorisation IMPERSONATE sur l'utilisateur, appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Utilisateur de base de données mappé sur un groupe Windows

Appartenance au groupe Windows, appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Utilisateur de base de données mappé sur un certificat

Appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Utilisateur de base de données mappé sur une clé asymétrique

Appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Utilisateur de base de données qui n'est mappé sur aucun principal d'un serveur

Autorisation IMPERSONATE sur l'utilisateur, appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Rôle de base de données

Autorisation ALTER sur le rôle, appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

Rôle d'application

Autorisation ALTER sur le rôle, appartenance aux rôles de base de données fixe db_securityadmin ou db_owner ou appartenance au rôle serveur fixe sysadmin.

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 détenteurs 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 sur n'importe quel élément sécurisable de 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

A. Octroi de l'autorisation INSERT sur le schéma HumanResources à l'invité (guest)

GRANT INSERT ON SCHEMA :: HumanResources TO guest;

B. Octroi de l'autorisation SELECT sur le schéma Person à l'utilisateur de base de données WilJo

GRANT SELECT ON SCHEMA :: Person TO WilJo WITH GRANT OPTION;