Sécurité d'accès du code de l'intégration du CLR
Le Common Language Runtime (CLR) prend en charge un modèle de sécurité appelé sécurité d’accès au code pour le code managé. Dans ce modèle, les autorisations sont accordées aux assemblys selon l'identité du code. Pour plus d'informations, consultez la section relative à la sécurité d'accès du code dans le kit de développement logiciel (SDK) .NET Framework.
La stratégie de sécurité qui détermine les autorisations accordée aux assemblys est définie dans trois emplacements différents :
Stratégie d’ordinateur : il s’agit de la stratégie en vigueur pour tout le code managé s’exécutant sur l’ordinateur sur lequel SQL Server est installé.
Stratégie de l'utilisateur : il s'agit de la stratégie appliquée pour le code managé hébergé par un processus. Par SQL Server service est en cours d’exécution.
Stratégie d’hôte : il s’agit de la stratégie configurée par l’hôte du CLR (dans ce cas, SQL Server) qui est en vigueur pour le code managé s’exécutant dans cet hôte.
Le mécanisme de sécurité d'accès du code pris en charge par le CLR est basé sur la supposition que le module d'exécution peut héberger à la fois du code d'un niveau de confiance total et d'un niveau de confiance partiel. Les ressources protégées par la sécurité d’accès au code CLR sont généralement encapsulées par des interfaces de programmation d’application managées qui nécessitent l’autorisation correspondante avant d’autoriser l’accès à la ressource. La demande pour l’autorisation n’est satisfaite que si tous les appelants (au niveau de l’assembly) de la pile d’appels disposent de l’autorisation de ressource correspondante.
L’ensemble d’autorisations de sécurité d’accès au code qui sont accordées au code managé lors de l’exécution à l’intérieur de SQL Server accorde un ensemble d’autorisations à un assembly chargé dans SQL Server, l’ensemble d’autorisations éventuellement accordé au code utilisateur peut être restreint davantage par les stratégies au niveau de l’utilisateur et de l’ordinateur.
Jeux d'autorisations au niveau stratégie de l'hôte de SQL Server
L’ensemble d’autorisations de sécurité d’accès au code accordées aux assemblys par le niveau de stratégie hôte SQL Server est déterminé par le jeu d’autorisations spécifié lors de la création de l’assembly. Il existe trois jeux d’autorisations : SAFE
et EXTERNAL_ACCESS
UNSAFE
(spécifiés à l’aide de l’option PERMISSION_SET deCREATE ASSEMBLY (Transact-SQL)).
Serveur SQL Server. Cette stratégie n'est pas destinée au domaine d'application par défaut qui serait effectif lorsque SQL Server crée une instance du CLR.
Le SQL Server fixedpolicy pour les assemblys système et la stratégie spécifiée par l’utilisateur pour les assemblys utilisateur.
La stratégie fixe pour les assemblys CLR et les assemblys système SQL Server leur octroie une confiance totale.
La partie spécifiée par l’utilisateur de la stratégie d’hôte SQL Server est basée sur le propriétaire de l’assembly qui spécifie l’un des trois compartiments d’autorisations pour chaque assembly. Pour plus d'informations sur les autorisations de sécurité répertoriées ci-dessous, consultez le kit de développement logiciel SDK .NET Framework.
SAFE
Seuls les calculs internes et l’accès aux données locales sont autorisés. SAFE
est le jeu d'autorisations le plus restrictif. Le code exécuté par un assembly à l'aide des autorisations SAFE
ne peut pas accéder aux ressources système externes telles que les fichiers, le réseau, les variables d'environnement ou le Registre.
Les assemblys SAFE
ont les autorisations et valeurs suivantes :
Autorisation | Valeur(s)/description |
---|---|
SecurityPermission |
Execution: autorisation d'exécuter le code managé. |
SqlClientPermission |
Context connection = true , context connection = yes : seule la connexion contextuelle peut être utilisée et la chaîne de connexion peut spécifier uniquement une valeur de « context connection=true » ou « context connection=yes ».AllowBlankPassword = false : Les mots de passe vides ne sont pas autorisés. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS assemblys disposent des mêmes autorisations que SAFE
les assemblys, avec la possibilité supplémentaire d’accéder aux ressources système externes telles que les fichiers, les réseaux, les variables environnementales et le Registre.
Les assemblys EXTERNAL_ACCESS
ont également les autorisations et valeurs suivantes :
Autorisation | Valeur(s)/description |
---|---|
DistributedTransactionPermission |
Unrestricted: Les transactions distribuées sont autorisées. |
DNSPermission |
Unrestricted: Autorisation de demander des informations aux serveurs de noms de domaine. |
EnvironmentPermission |
Unrestricted: l'accès complet aux variables du système et de l'environnement utilisateur est accordé. |
EventLogPermission |
Administer: les actions suivantes sont autorisées : création d'une source d'événement, lecture de journaux existants, suppression de sources d'événements ou de journaux, réponse aux entrées, effacement d'un journal des événements, écoute des événements et accès à une collection de tous les journaux des événements. |
FileIOPermission |
Unrestricted: l'accès complet aux fichiers et aux dossiers est accordé. |
KeyContainerPermission |
Unrestricted: l'accès complet aux conteneurs de clés est accordé. |
NetworkInformationPermission |
Access: l'exécution de requêtes ping est autorisée. |
RegistryPermission |
Autorise des droits de lecture à HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG et HKEY_USERS. |
SecurityPermission |
Assertion: possibilité de déclarer que tous les appelants de ce code ont l'autorisation requise pour l'opération.ControlPrincipal: possibilité de manipuler l'objet principalExecution: autorisation d'exécuter le code managé.SerializationFormatter: possibilité de fournir des services de sérialisation. |
SmtpPermission | Access: les connexions sortantes au port 25 hôte SMTP sont autorisées. |
SocketPermission |
Connect: les connexions sortantes (tous les ports, tous les protocoles) sur une adresse de transport sont autorisées. |
SqlClientPermission |
Unrestricted: l'accès complet à la source de données est accordé. |
StorePermission |
Unrestricted: l'accès complet aux magasins de certificats X.509 est accordé. |
WebPermission |
Connect: les connexions sortantes aux ressources Web sont autorisées. |
UNSAFE
UNSAFE autorise les assemblys à accéder sans restriction aux ressources, tant à l’intérieur qu’à l’extérieur de SQL Server. Le code qui s'exécute dans un assembly UNSAFE
peut également appeler du code non managé.
Les assemblys UNSAFE
dispose de l'approbation FullTrust
.
Important
SAFE
est le paramètre d’autorisation recommandé pour les assemblys qui effectuent des tâches de calcul et de gestion des données sans accéder aux ressources en dehors de SQL Server. EXTERNAL_ACCESS
les assemblys s’exécutent par défaut en tant que compte de service SQL Server. L’autorisation d’exécution EXTERNAL_ACCESS
doit uniquement être accordée aux connexions approuvées pour s’exécuter en tant que compte de service. Du point de vue de la sécurité, les assemblys EXTERNAL_ACCESS
et UNSAFE
sont identiques. Toutefois, les assemblys EXTERNAL_ACCESS
fournissent différentes protections en matière de fiabilité et de robustesse absentes des assemblys UNSAFE
. UNSAFE
La spécification permet au code dans l’assembly d’effectuer des opérations illégales sur le SQL Server. Pour plus d’informations sur la création d’assemblys CLR dans SQL Server, consultez Gestion des assemblys d’intégration CLR.
Accès aux ressources externes
Si un type défini par l'utilisateur (UDT), une procédure stockée ou autre type d'assembly de construction est inscrit avec le jeu d'autorisations SAFE
, le code managé qui s'exécute dans la construction ne peut pas accéder aux ressources externes. Toutefois, si les jeux d’autorisations ou UNSAFE
sont spécifiés et que le EXTERNAL_ACCESS
code managé tente d’accéder aux ressources externes, SQL Server applique les règles suivantes :
Si | Alors |
---|---|
Le contexte d'exécution correspond à une connexion SQL Server. | Les tentatives d'accéder aux ressources externes sont refusées et une exception de sécurité est levée. |
Le contexte d'exécution correspond à une connexion Windows et le contexte d'exécution est l'appelant d'origine. | L'accès à la ressource externe se fait dans le contexte de sécurité du compte de service SQL Server. |
L'appelant n'est pas l'appelant d'origine. | L'accès est refusé et une exception de sécurité est levée. |
Le contexte d’exécution correspond à une connexion Windows et le contexte d’exécution est l’appelant d’origine et l’appelant a été impersonné. | L'accès s'effectue en utilisant le contexte de sécurité de l'appelant, et non le compte de service. |
Synthèse des jeux d'autorisations
Le graphique suivant résume les restrictions et autorisations accordées aux jeux d'autorisations SAFE
, EXTERNAL_ACCESS
et UNSAFE
.
SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|
Code Access Security Permissions |
Exécution uniquement | Exécution + accès aux ressources externes | Illimité (y compris P/Invoke) |
Programming model restrictions |
Oui | Oui | Sans restriction |
Verifiability requirement |
Oui | Oui | Non |
Local data access |
Oui | Oui | Oui |
Ability to call native code |
Non | Non | Oui |
Voir aussi
Sécurité de l'intégration du CLR
Attributs de protection de l'hôte et programmation de l'intégration CLR
Restrictions du modèle de programmation de l'intégration du CLR
Environnement hébergé CLR