Sécurité et autorisations d'accès du code

Dans le .NET Framework, la sécurité d'accès du code limite l'accès du code aux ressources et opérations protégées.Chaque application qui cible le Common Language Runtime doit interagir avec le système de sécurité du runtime.Lorsqu'une application est exécutée, elle est automatiquement évaluée et reçoit un jeu d'autorisations de la part du runtime.En fonction des autorisations reçues, l'application peut s'exécuter correctement ou générer une exception de sécurité.

Les paramètres de sécurité locaux d'un ordinateur particulier contrôlent en fin de compte les autorisations que le code reçoit.Puisque ces paramètres peuvent varier d'un ordinateur à l'autre, vous ne pouvez jamais être sûr que votre code recevra les autorisations suffisantes pour s'exécuter.Pour plus d'informations, consultez Notions fondamentales de la sécurité d'accès du code.

Autorisations d'accès du code

Les objets d'autorisation d'accès du code servent à protéger les ressources et les opérations d'une utilisation par des utilisateurs non autorisés.Elles constituent un élément fondamental du mécanisme utilisé par le Common Language Runtime pour imposer des restrictions de sécurité sur le code managé.

Les autorisations d'accès du code permettent à un utilisateur d'accéder à une ressource protégée, telle qu'un fichier, ou d'exécuter une action protégée, telle que l'accès au code managé.Toutes les autorisations d'accès du code peuvent être demandées par code ; l'octroi ou non d'autorisations est déterminé par le runtime.Chaque autorisation d'accès du code provient de la classe CodeAccessPermission, et par conséquent, les autorisations ont des méthodes communes : Assert, Demand, Deny, PermitOnly, IsSubSetOf, Intersect et Union.

Autorisations fournies par .NET Framework

Ce tableau présente les autorisations d'accès du code fournies par le .NET Framework.

Classe d'autorisation

Permet

AspNetHostingPermission

Accès aux ressources dans des environnements hébergés par ASP.NET.

DirectoryServicesPermission

Accès aux classes System.DirectoryServices.

DnsPermission

Accès aux serveurs de système de noms de domaines (DNS) sur un réseau.

EnvironmentPermission

Lecture ou écriture dans des variables d'environnement.

EventLogPermission

Lecture ou écriture dans des services de journaux d'événements.

FileDialogPermission

Lecture ou écriture dans des fichiers au moyen d'une boîte de dialogue Ouvrir.

FileIOPermission

Lecture ou écriture dans des fichiers ou répertoires.

IsolatedStorageFilePermission

Lecture ou écriture dans des fichiers ou répertoires dans un stockage isolé.

MessageQueuePermission

Accès aux files d'attente de messages par le biais des interfaces MSMQ (Microsoft Message Queuing).

OdbcPermission

Accès aux sources de données ODBC (Open Database Connectivity).

OleDbPermission

Accès à des bases de données utilisant OLE DB.

OraclePermission

Accès aux bases de données Oracle.

PerformanceCounterPermission

Accès aux compteurs de performance.

PrintingPermission

Accès aux imprimantes.

ReflectionPermission

Définition d'informations se rapportant à un type au moment de l'exécution.

RegistryPermission

Lecture, écriture, création ou suppression de clés de Registre et de valeurs.

SecurityPermission

Exécution, assertion d'autorisations, appel dans du code non managé, omission de vérification et autres droits liés à la sécurité.

ServiceControllerPermission

Accès à des services en cours d'exécution ou arrêtés.

SocketPermission

Établissement ou acceptation de connexions sur une adresse de transport.

SqlClientPermission

Accès à des bases de données SQL.

UIPermission

Accès aux fonctionnalités de l'interface utilisateur.

WebPermission

Établissement ou acceptation de connexions sur une adresse Web.

Création de vos propres autorisations

Le .NET Framework fournit un jeu de classes d'autorisations d'accès du code conçu pour protéger un ensemble spécifique de ressources et d'opérations ; les ressources exposées par le .NET Framework sont tout particulièrement ciblées.Pour la plupart des environnements, les autorisations d'accès du code intégrées sont adéquates.Cependant, dans certains cas, il peut s'avérer avisé de définir votre propre classe d'autorisations d'accès du code.Pour plus d'informations, consultez Création de vos propres autorisations d'accès du code.

Autorisations d'identité

Les autorisations d'identité représentent des caractéristiques qui identifient un assembly.Le Common Language Runtime octroie des autorisations d'identité à un assembly lors de son chargement, en se basant sur les informations qu'il obtient sur celui-ci.Pour plus d'informations, consultez Autorisations d'identité.

Autorisations basées sur les rôles

Les applications destinées aux entreprises accordent souvent l'accès aux données et aux ressources en fonction des informations d'identification fournies par l'utilisateur.Pour cela, elles vérifient en général le rôle de l'utilisateur afin de lui donner accès aux ressources en rapport avec son rôle.Le Common Language Runtime fournit une prise en charge des autorisations basées sur les rôles pour des comptes Windows ou des identités personnalisées.Pour plus d'informations, consultez Sécurité basée sur les rôles.

Tâches liées à la sécurité

Le tableau suivant répertorie les tâches associées aux autorisations et à la sécurité.

Pour

Reportez-vous à

Demander l'autorisation pour accéder à du code non managé

Comment : demander l'autorisation d'accéder à du code non managé

Demander des autorisations facultatives

Comment : demander des autorisations facultatives à l'aide de l'indicateur RequestOptional

Demander l'autorisation pour un jeu d'autorisations nommé

Comment : demander l'autorisation pour un jeu d'autorisations nommé

Demander des autorisations encodées au format XML

Demande d'autorisations encodées en XML

Refuser des autorisations

Comment : refuser des autorisations à l'aide de l'indicateur RequestRefuse

Exécuter une vérification de sécurité impérative

Comment : exécuter les vérifications de sécurité impératives

Exécuter une vérification de sécurité déclarative

Exécution de vérifications de sécurité déclaratives

Substituer une vérification de sécurité

Substitution des vérifications de sécurité

Partager une bibliothèque avec du code d'un niveau de confiance partiel

Partage d'une bibliothèque avec du code d'un niveau de confiance partiel

Requérir la confiance totale pour les types dans un assembly AllowPartiallyTrustedCallersAttribute

Nécessité d'une confiance totale pour des types dans un assembly AllowPartiallyTrustedCallersAttribute

Créer des objets WindowsIdentity et WindowsPrincipal.

Comment : créer un objet WindowsPrincipal

Créer des objets GenericPrincipal et GenericIdentity.

Comment : créer des objets GenericPrincipal et GenericIdentity

Modèle de stratégie de sécurité du .NET Framework

Cinq éléments composent le modèle de stratégie de sécurité du .NET Framework.Il s'agit des éléments suivants :

  • Niveaux de stratégie de sécurité : entreprise, ordinateur, utilisateur et domaine d'application.

  • Groupes de codes qui existent en tant que hiérarchie aux niveaux de stratégie de l'entreprise, de l'ordinateur et de l'utilisateur.

  • Jeux d'autorisations nommés associés à chaque groupe de codes.

  • Preuve qui fournit des informations sur l'identité du code.

  • Hôtes de domaine d'application qui fournissent une preuve à propos du code au Common Language Runtime.

Niveaux de stratégie de sécurité

Quatre niveaux de stratégie de sécurité sont fournis par le .NET Framework pour calculer l'octroi d'autorisations à un assembly ou à un domaine d'application.Chaque niveau contient sa propre hiérarchie de groupes de codes et ses jeux d'autorisations.Le runtime calcule le jeu d'autorisations octroyées comme la somme d'autorisations autorisée par tous les niveaux participants d'une stratégie

Ces niveaux sont les suivants :

  • Stratégie d'entreprise.S'applique à tout le code managé dans un environnement d'entreprise, où un fichier de configuration d'entreprise est distribué.

  • Stratégie de l'ordinateur.S'applique à tout le code managé sur l'ordinateur.

  • Stratégie de l'utilisateur.S'applique au code de tous les processus associés à l'utilisateur du système d'exploitation en cours lorsque le Common Language Runtime démarre.

  • Stratégie de domaine d'application.S'applique au code managé dans le domaine d'application de l'hôte.

Pour plus d'informations, consultez Niveaux de stratégie de sécurité.

Groupes de codes

Un groupe de codes est un regroupement logique de codes selon une condition particulière d'appartenance.Tout code remplissant la condition d'appartenance est inclus dans le groupe.Les groupes de codes ont associé des jeux d'autorisations qui sont évalués lors de l'établissement d'une stratégie.Pour plus d'informations, consultez Groupes de codes.

Jeux d'autorisations nommés

Un jeu d'autorisations nommé est un jeu d'autorisations que les administrateurs peuvent associer à un groupe de codes.Un jeu d'autorisations nommé est constitué d'au moins une autorisation, ainsi que d'un nom et d'une description pour le jeu.Plusieurs groupes de codes peuvent être associés ç un jeu d'autorisations spécifique.

Ce tableau présente les jeux d'autorisations nommés fournis par le common language runtime.

Nom

Description

Nothing

Pas d'autorisations (le code ne s'exécute pas).

Execution

Autorisations d'exécuter, mais pas d'autorisations d'utiliser des ressources protégées.

Internet

Jeu d'autorisations de la stratégie par défaut adaptée au contenu d'origine inconnue.

Local Intranet

Jeu d'autorisations de la stratégie par défaut au sein d'une entreprise.

Everything

Toutes autorisations standard (intégrées), à l'exception de l'autorisation d'ignorer la vérification.

FullTrust

Accès intégral à toutes les ressources.

Pour plus d'informations, consultez Jeux d'autorisations nommés.

Preuve

La preuve est l'information que le Common Language Runtime utilise pour prendre des décisions fondées sur la stratégie de sécurité.La preuve indique au runtime que le code a une caractéristique particulière et peut inclure le répertoire de l'application, l'éditeur, le site et l'URL.Pour plus d'informations, consultez Preuve.

Hôtes de domaine d'application

Chaque application .NET Framework s'exécute dans un domaine d'application sous le contrôle d'un hôte qui crée le domaine d'application et y charge les assemblys.Les domaines d'application peuvent inclure :

  • Les hôtes de navigateur.Exécutent le code dans le contexte d'un site Web.

  • Les hôtes conçus de manière personnalisée.Créent des domaines et chargent des assemblys dans les domaines, y compris des assemblys dynamiques.

  • Les hôtes de serveur, exécutent le code qui gère les demandes envoyées à un serveur.

  • Les hôtes de shell.Lancent des applications (fichiers .exe) à partir du shell.

Ce tableau répertorie les tâches associées aux domaines d'application :

Pour

Reportez-vous à

Créer un domaine d'application.

Comment : créer un domaine d'application

Définir la stratégie de sécurité de niveau de domaine d'application

Définition d'une stratégie de sécurité au niveau du domaine d'application

Configurer un domaine d'application.

Comment : configurer un domaine d'application

Appeler des fonctions dans un domaine d'application spécifique

Calling Functions in a Specific Application Domain

Récupérer des informations d'installation à partir d'un domaine d'application

Récupération d'informations d'installation à partir d'un domaine d'application

Décharger un domaine d'application

Comment : décharger un domaine d'application

Pour plus d'informations, consultez AppDomain, Hôtes de domaine d'application et Programmation avec des domaines d'application.

Voir aussi

Tâches

Dépannage des exceptions de sécurité d'accès du code

Référence

Mscorcfg.msc (outil .NET Framework Configuration)

Concepts

Isolation par utilisateur, par domaine et par assembly

Autres ressources

Configuration de la stratégie de sécurité à l'aide de l'outil Code Access Security Policy Tool (Caspol.exe)