Partager via


Sécurité d'accès du code et ADO.NET

La sécurité de Windows vous permet de sécuriser les ressources en fonction du rôle de l'utilisateur. Par exemple, un administrateur a des droits illimités, tandis qu'un invité n'a qu'un accès limité. Le .NET Framework comporte un dispositif de sécurité appelé sécurité d'accès du code qui vous permet de mieux sécuriser votre application. Lorsque vous utilisez la sécurité d'accès du code, des autorisations différentes sont accordées en fonction de l'origine du code, identifiée par le Zone de l'assembly, et des autorisations accordées pour cette zone dans la stratégie de sécurité d'accès du code. Par exemple, le code qui réside sur un ordinateur est identifié comme appartenant à la zone MyComputer. Le code téléchargé à partir d'un autre ordinateur sur l'intranet local est identifié comme appartenant à la zone LocalIntranet. Vous pouvez appliquer des jeux d'autorisations différents à chaque zone pour améliorer la sécurité du code externe dans la zone LocalIntranet, tandis que dans la zone MyComputer vous imposerez une sécurité moins stricte.

Pour définir les restrictions applicables à une zone particulière, vous utilisez un jeu d'autorisations. Le .NET Framework est fourni avec plusieurs jeux d'autorisations par défaut, mais vous pouvez créer votre propre jeu et l'identifier comme le jeu applicable à une certaine zone.

Les jeux d'autorisations se répartissent généralement en trois catégories : confiance totale, confiance partielle et absence de confiance. Si la confiance est totale, aucune restriction ne s'applique au code qui est utilisé par défaut pour l'ordinateur local et les sources à nom fort. Les zones auxquelles n'est associé aucun jeu d'autorisations sont considérées comme non fiables (absence de confiance) et ne peuvent utiliser que les fonctions qui n'exigent aucune autorisation. Les jeux d'autorisations à confiance partielle contiennent une combinaison d'autorisations et de restrictions appropriées à la zone considérée.

Pour être considérée comme appropriée, l'exécution des fournisseurs de données OLE DB, ODBC et Oracle .NET Framework doit s'effectuer dans une zone disposant du jeu d'autorisations de confiance totale (FullTrust). Toute tentative d'utiliser le fournisseur de données OLE DB ou ODBC dans une zone possédant un niveau d'autorisation inférieur entraîne un SecurityException. Les fournisseurs de données OLE DB, ODBC et Oracle exigent l'autorisation FullTrust au moment de la liaison et durant l'exécution du code. Dans le .NET Framework Version 1.0, les fournisseurs de données OLE DB, ODBC et Oracle n'exigeaient l'autorisation FullTrust qu'au moment de la liaison.

Remarque   Le fournisseur de données SQL Server fourni avec le .NET Framework version 1.0 doit obligatoirement être exécuté avec l'autorisation FullTrust. Toute tentative d'utiliser le fournisseur de données SQL Server dans une zone possédant un niveau d'autorisation inférieur entraîne un SecurityException.

Le fournisseur de données .NET Framework pour SQL Server peut être exécuté dans une zone avec autorisation FullTrust ou une zone avec jeu d'autorisations de confiance partielle. Une application avec confiance partielle doit disposer au minimum des autorisations d'exécution et de client SQL. Pour les zones avec confiance partielle, vous pouvez utiliser les attributs d'autorisation SqlClient afin de restreindre encore les fonctions mises à la disposition du fournisseur SQL Server.

Remarque   Le fournisseur de données .NET Framework pour SQL Server exige une autorisation de sécurité avec l'option Autoriser les appels vers des assemblys non managés activée (SecurityPermission pour le UnmanagedCode SecurityPermissionFlag) afin d'ouvrir un SqlConnection avec le débogage SQL activé.

Pour utiliser les autorisations SqlClient dans une zone particulière, un administrateur doit créer un jeu d'autorisations personnalisé et le définir comme le jeu associé à la zone concernée. Les jeux d'autorisations par défaut, tels que LocalIntranet, ne peuvent pas être modifiés. Par exemple, pour inclure les autorisations SqlClient pour un code de Zone LocalIntranet, un administrateur peut copier le jeu d'autorisations LocalIntranet, changer son nom en MonIntranetLocal, ajouter les autorisations SqlClient, importer le jeu d'autorisations MonIntranetLocal à l'aide de l'outil Code Access Security Policy Tool (Caspol.exe) et définir le jeu LocalIntranet_Zone pour MonIntranetLocal.

Le tableau suivant répertorie les propriétés d'attribut d'autorisation disponibles et leur champ d'application.

Propriété SqlClientPermissionAttribute Description
AllowBlankPassword Active ou désactive l'utilisation d'un mot de passe vide dans une chaîne de connexion. Les valeurs valides sont true pour activer l'utilisation des mots de passe vides et false pour la désactiver.
ConnectionString Identifie une chaîne de connexion permise. Plusieurs chaînes de connexion peuvent être identifiées. Vous pouvez également fournir des restrictions liées à la chaîne de connexion supplémentaires à l'aide de KeyRestrictions.

Il est recommandé de ne pas inclure d'ID utilisateur ni de mot de passe dans la chaîne de connexion.

Dans cette version, vous ne pouvez pas modifier les restrictions liées à la chaîne de connexion à l'aide de l'outil de configuration .NET Framework.

KeyRestrictions Identifie les paramètres de chaîne de connexion autorisés et non autorisés. Les paramètres de chaîne de connexion suivent le format <nom de paramètre>=. Plusieurs paramètres peuvent être spécifiés à condition qu'ils soient séparés par un point-virgule (;). Les paramètres de chaîne de connexion répertoriés sont identifiés comme les seuls paramètres supplémentaires autorisés ou comme les paramètres supplémentaires non autorisés à l'aide de la propriété KeyRestrictionBehavior.

Si aucun KeyRestrictions n'est spécifié et que la propriété KeyRestrictionBehavior ait la valeur AllowOnly, aucun paramètre de chaîne de connexion supplémentaire n'est autorisé.

Si aucun KeyRestrictions n'est spécifié et que la propriété KeyRestrictionBehavior ait la valeur PreventUsage, aucun paramètre de chaîne de connexion supplémentaire n'est autorisé.

KeyRestrictionBehavior Indique si les paramètres de chaîne de connexion identifiés par la propriété KeyRestrictions sont les seuls paramètres supplémentaires autorisés (AllowOnly) ou bien les paramètres supplémentaires non autorisés (PreventUsage). AllowOnly est la valeur par défaut.

Par exemple, le paramètre de propriété suivant autorise seulement l'utilisation des chaîne de connexion Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;.

<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />

Pour activer la même chaîne de connexion ainsi que l'utilisation des options de chaîne de connexion Encrypt et Packet Size, mais en restreignant l'utilisation de toutes les autres options de chaîne de connexion, employez le code suivant :

<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />

Pour activer la même chaîne de connexion et autoriser tous les autres paramètres de connexion à l'exception de User Id, Password et Persist Security Info, utilisez le code suivant :

<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="User Id=;Password=;Persist Security Info=;"
KeyRestrictionBehavior="PreventUsage" />

Les autorisations suivantes permettent les connexions à localhost et à MySqlServer à l'aide de la sécurité intégrée. Les chaînes de connexion peuvent également contenir les paramètres Initial Catalog, Connection Timeout, Encrypt et Packet Size. L'utilisation de tous les autres paramètres de chaîne de connexion est restreinte.

<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
     KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
     KeyRestrictionBehavior="AllowOnly" />
<add ConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
     KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
     KeyRestrictionBehavior="AllowOnly" />

Exemple de jeu d'autorisations

Voici un exemple de jeu d'autorisations destiné au fournisseur de données SQL Serveur .NET Framework dans un scénario à confiance partielle. Pour plus d'informations sur la création des jeux d'autorisations personnalisés, consultez Configuration des jeux d'autorisations à l'aide de Caspol.exe.

<PermissionSet class="System.Security.NamedPermissionSet"
               version="1"
               Name="MyLocalIntranet"
               Description="Custom permission set given to applications on the local intranet">

   <IPermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                version="1"
                AllowBlankPassword="False">
      <add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
           KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
           KeyRestrictionBehavior="AllowOnly" />
   </IPermission>

</PermissionSet>

Voir aussi

Écriture de code ADO.NET sécurisé | Sécurité d'accès du code | Outil .NET Framework Configuration Tool (Mscorcfg.msc)