Autorisation et permissions dans SQL ServerAuthorization and Permissions in SQL Server

Lorsque vous créez des objets de base de données, vous devez accorder explicitement des autorisations de manière à les rendre accessibles aux utilisateurs.When you create database objects, you must explicitly grant permissions to make them accessible to users. Chaque objet sécurisable possède des autorisations qui peuvent être accordées à une principal de sécurité à l'aide d'instructions d'autorisation.Every securable object has permissions that can be granted to a principal using permission statements.

Principe des privilèges minimumThe Principle of Least Privilege

Le développement d'une application selon l'approche du compte d'utilisateur disposant de privilèges minimum (LUA, Least-privileged User Account) est un élément important de la stratégie de défense en profondeur visant à contrer les menaces de sécurité.Developing an application using a least-privileged user account (LUA) approach is an important part of a defensive, in-depth strategy for countering security threats. L'approche LUA garantit que les utilisateurs suivent le principe des privilèges minimum et ouvrent toujours leur session avec des comptes d'utilisateurs limités.The LUA approach ensures that users follow the principle of least privilege and always log on with limited user accounts. Les tâches administratives sont classées par rôle serveur fixe. L'utilisation du rôle serveur fixe sysadmin est extrêmement limitée.Administrative tasks are broken out using fixed server roles, and the use of the sysadmin fixed server role is severely restricted.

Suivez toujours le principe des privilèges minimum lorsque vous accordez des autorisations aux utilisateurs de base de données.Always follow the principle of least privilege when granting permissions to database users. Accordez les autorisations minimales nécessaires à un utilisateur ou à un rôle pour accomplir une tâche donnée.Grant the minimum permissions necessary to a user or role to accomplish a given task.

Important

Le développement et le test d'une application selon l'approche LUA compliquent quelque peu le processus.Developing and testing an application using the LUA approach adds a degree of difficulty to the development process. Il est plus simple de créer des objets et d'écrire du code tout en étant connecté en tant qu'administrateur système ou propriétaire de base de données qu'en utilisant un compte LUA.It is easier to create objects and write code while logged on as a system administrator or database owner than it is using a LUA account. Cependant, le fait de développer des applications en utilisant un compte disposant de privilèges élevés peut masquer l'impact de fonctionnalités réduites lorsque des utilisateurs disposant de privilèges minimum essaient d'exécuter une application qui requiert des autorisations élevées pour fonctionner correctement.However, developing applications using a highly privileged account can obfuscate the impact of reduced functionality when least privileged users attempt to run an application that requires elevated permissions in order to function correctly. Par ailleurs, le fait d'accorder des autorisations excessives aux utilisateurs afin qu'ils puissent réacquérir une fonctionnalité perdue peut rendre votre application vulnérable aux attaques.Granting excessive permissions to users in order to reacquire lost functionality can leave your application vulnerable to attack. La conception, le développement et le test de votre application alors que vous êtes connecté avec un compte LUA appliquent une approche disciplinée qui évite toute mauvaise surprise et empêche de céder à la facilité en accordant des privilèges élevés.Designing, developing and testing your application logged on with a LUA account enforces a disciplined approach to security planning that eliminates unpleasant surprises and the temptation to grant elevated privileges as a quick fix. Vous pouvez utiliser une connexion SQL Server pour le test même si votre application doit être déployée à l'aide de l'authentification Windows.You can use a SQL Server login for testing even if your application is intended to deploy using Windows authentication.

Autorisations basées sur les rôlesRole-Based Permissions

L'octroi d'autorisations aux rôles plutôt qu'aux utilisateurs simplifie l'administration de la sécurité.Granting permissions to roles rather than to users simplifies security administration. Les jeux d'autorisations qui sont assignés aux rôles sont hérités par tous les membres du rôle.Permission sets that are assigned to roles are inherited by all members of the role. Il est plus facile d'ajouter des utilisateurs à un rôle ou d'en supprimer que de recréer des jeux d'autorisations distincts individuellement pour chaque utilisateur.It is easier to add or remove users from a role than it is to recreate separate permission sets for individual users. Les rôles peuvent être imbriqués ; toutefois, des niveaux d'imbrication trop nombreux peuvent dégrader les performances.Roles can be nested; however, too many levels of nesting can degrade performance. Vous pouvez également ajouter des utilisateurs aux rôles de base de données fixes pour simplifier l'assignation d'autorisations.You can also add users to fixed database roles to simplify assigning permissions.

Vous pouvez accorder des autorisations au niveau du schéma.You can grant permissions at the schema level. Les utilisateurs héritent automatiquement des autorisations sur tous les nouveaux objets créés dans le schéma. Il n'est alors pas nécessaire d'accorder des autorisations dès que de nouveaux objets sont créés.Users automatically inherit permissions on all new objects created in the schema; you do not need to grant permissions as new objects are created.

Autorisations par le biais du code de procédurePermissions Through Procedural Code

L'encapsulation de l'accès aux données par le biais de modules, comme des procédures stockées et des fonctions définies par l'utilisateur, offre une couche supplémentaire de protection autour de votre application.Encapsulating data access through modules such as stored procedures and user-defined functions provides an additional layer of protection around your application. Vous pouvez empêcher un utilisateur d'interagir directement avec les objets de base de données en accordant des autorisations uniquement aux procédures stockées et aux fonctions tout en refusant les autorisations sur les objets sous-jacents comme les tables.You can prevent users from directly interacting with database objects by granting permissions only to stored procedures or functions while denying permissions to underlying objects such as tables. Pour cela, SQL Server effectue un chaînage de propriétés.SQL Server achieves this by ownership chaining.

Instructions d'autorisationPermission Statements

Les trois instructions d'autorisation Transact-SQL sont décrites dans le tableau suivant.The three Transact-SQL permission statements are described in the following table.

Instruction d'autorisationPermission Statement DescriptionDescription
GRANTGRANT Accorde une autorisation.Grants a permission.
REVOKEREVOKE Révoque une autorisation.Revokes a permission. Il s'agit de l'état par défaut d'un nouvel objet.This is the default state of a new object. Une autorisation révoquée pour un utilisateur ou un rôle peut être héritée d'autres groupes ou rôles auxquels la principal de sécurité est assignée.A permission revoked from a user or role can still be inherited from other groups or roles to which the principal is assigned.
DENYDENY DENY révoque une autorisation afin qu'elle ne puisse plus être héritée.DENY revokes a permission so that it cannot be inherited. DENY a priorité sur toutes les autorisations, mais ne s'applique pas aux propriétaires d'objets ni aux membres de sysadmin.DENY takes precedence over all permissions, except DENY does not apply to object owners or members of sysadmin. Si vous refusez des autorisations sur un objet au rôle public, elles sont refusées à tous les utilisateurs et rôles, à l'exception des propriétaires d'objets et des membres sysadmin.If you DENY permissions on an object to the public role it is denied to all users and roles except for object owners and sysadmin members.
  • L'instruction GRANT peut assigner des autorisations à un groupe ou un rôle qui peuvent être héritées par les utilisateurs de base de données.The GRANT statement can assign permissions to a group or role that can be inherited by database users. Toutefois, l'instruction DENY a priorité sur toutes les autres instructions d'autorisation.However, the DENY statement takes precedence over all other permission statements. Par conséquent, un utilisateur à qui une autorisation a été refusée ne peut pas en hériter d'un autre rôle.Therefore, a user who has been denied a permission cannot inherit it from another role.

Notes

Les membres du rôle serveur fixe sysadmin et des propriétaires d'objets ne peuvent pas se voir refuser des autorisations.Members of the sysadmin fixed server role and object owners cannot be denied permissions.

Chaînes de propriétésOwnership Chains

SQL Server garantit que seules les entités de sécurité qui en ont reçu l'autorisation peuvent accéder aux objets.SQL Server ensures that only principals that have been granted permission can access objects. Lorsque plusieurs objets de base de données accèdent les uns aux autres, la séquence est qualifiée de chaîne.When multiple database objects access each other, the sequence is known as a chain. Lorsque SQL Server traverse les liens de la chaîne, il évalue les autorisations différemment que s'il accédait séparément à chaque élément.When SQL Server is traversing the links in the chain, it evaluates permissions differently than it would if it were accessing each item separately. Lors de l'accès à un objet par le biais d'une chaîne, SQL Server commence par comparer le propriétaire de l'objet au propriétaire de l'objet appelant (le lien précédent de la chaîne).When an object is accessed through a chain, SQL Server first compares the object's owner to the owner of the calling object (the previous link in the chain). Si les deux objets ont le même propriétaire, les autorisations de l'objet référencé ne sont pas vérifiées.If both objects have the same owner, permissions on the referenced object are not checked. Si les propriétaires sont différents, la chaîne de propriétés est rompue et SQL Server doit vérifier le contexte de sécurité de l'appelant.Whenever an object accesses another object that has a different owner, the ownership chain is broken and SQL Server must check the caller's security context.

Code de procédure et chaînage de propriétésProcedural Code and Ownership Chaining

Supposons qu'un utilisateur bénéficie des autorisations d'exécution sur une procédure stockée qui sélectionne des données dans une table.Suppose that a user is granted execute permissions on a stored procedure that selects data from a table. Si la procédure stockée et la table ont le même propriétaire, il n'est pas nécessaire que l'utilisateur bénéficie d'autorisations quelles qu'elles soient ; il peut même s'en voir refuser.If the stored procedure and the table have the same owner, the user doesn't need to be granted any permissions on the table and can even be denied permissions. Cependant, si la procédure stockée et la table ont des propriétaires différents, SQL Server doit vérifier les autorisations de l'utilisateur sur la table avant d'autoriser l'accès aux données.However, if the stored procedure and the table have different owners, SQL Server must check the user's permissions on the table before allowing access to the data.

Notes

Le chaînage des propriétés ne s'applique pas aux instructions SQL dynamiques.Ownership chaining does not apply in the case of dynamic SQL statements. Pour appeler une procédure qui exécute une instruction SQL, l'appelant doit bénéficier d'autorisations sur les tables sous-jacentes, ce qui rend votre application vulnérable aux attaques par injection de code SQL.To call a procedure that executes an SQL statement, the caller must be granted permissions on the underlying tables, leaving your application vulnerable to SQL Injection attack. SQL Server fournit de nouveaux mécanismes, comme l'emprunt d'identité et la signature de modules à l'aide de certificats, qui ne requièrent pas l'octroi d'autorisations sur les tables sous-jacentes.SQL Server provides new mechanisms, such as impersonation and signing modules with certificates, that do not require granting permissions on the underlying tables. Ils peuvent également être utilisés avec les procédures stockées CLR.These can also be used with CLR stored procedures.

Ressources externesExternal Resources

Pour plus d'informations, voir les ressources ci-dessous.For more information, see the following resources.

RessourceResource DescriptionDescription
autorisationsPermissions Contient des rubriques qui décrivent la hiérarchie des autorisations, les affichages catalogue et les autorisations des rôles serveur et de base de données fixes.Contains topics describing permissions hierarchy, catalog views, and permissions of fixed server and database roles.

Voir aussiSee also