Intégration du CLR - Vue d’ensembleCLR Integration - Overview

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Le CLR (Common Language Runtime) est le cœur de Microsoft .NET Framework et fournit l'environnement d'exécution de la totalité du code .NET Framework.The common language runtime (CLR) is the heart of the Microsoft .NET Framework and provides the execution environment for all .NET Framework code. Le code qui s'exécute au sein du CLR est désigné sous le nom de code managé.Code that runs within the CLR is referred to as managed code. Le CLR fournit divers fonctions et services requis pour l'exécution du programme, y compris la compilation juste-à-temps (JIT), l'allocation et la gestion de la mémoire, la mise en application de la cohérence des types, la gestion des exceptions, la gestion des threads et la sécurité.The CLR provides various functions and services required for program execution, including just-in-time (JIT) compilation, allocating and managing memory, enforcing type safety, exception handling, thread management, and security. Pour plus d'informations, consultez la documentation du Kit de développement (SDK) .NET Framework.See the .NET Framework SDK for more information.

Avec le CLR hébergé dans Microsoft SQL Server (intégration du CLR), vous pouvez créer des procédures stockées, des déclencheurs, des fonctions définies par l'utilisateur, des types définis par l'utilisateur et des agrégats définis par l'utilisateur en code managé.With the CLR hosted in Microsoft SQL Server (called CLR integration), you can author stored procedures, triggers, user-defined functions, user-defined types, and user-defined aggregates in managed code. Comme le code managé est compilé en code natif avant l'exécution, vous pouvez obtenir une amélioration significative des performances dans certains scénarios.Because managed code compiles to native code prior to execution, you can achieve significant performance increases in some scenarios.

Le code managé utilise la sécurité d'accès du code pour empêcher les assemblys d'effectuer certaines opérations.Managed code uses Code Access Security (CAS) to prevent assemblies from performing certain operations. SQL ServerSQL Server utilise la sécurité d'accès du code pour aider à sécuriser le code managé et empêcher que le système d'exploitation ou le serveur de base de données ne soit menacé.uses CAS to help secure the managed code and prevent compromise of the operating system or database server.

Avantages de l'intégration du CLRAdvantages of CLR Integration

Transact-SQLTransact-SQL est conçu spécifiquement pour l'accès direct aux données et les manipulations de la base de données.is specifically designed for direct data access and manipulation in the database. Même si Transact-SQLTransact-SQL convient parfaitement pour accéder aux données et les gérer, ce n'est pas un langage de programmation à part entière.While Transact-SQLTransact-SQL excels at data access and management, it is not a full-fledged programming language. Par exemple, Transact-SQLTransact-SQL ne prend pas en charge les tableaux, les collections, les boucles for-each, le décalage de bits ou les classes.For example, Transact-SQLTransact-SQL does not support arrays, collections, for-each loops, bit shifting, or classes. Bien que certaines de ces constructions puissent être simulées dans Transact-SQLTransact-SQL, le code managé a intégré leur prise en charge.While some of these constructs can be simulated in Transact-SQLTransact-SQL, managed code has integrated support for these constructs. Selon le scénario, ces fonctionnalités peuvent fournir une raison attrayante d'implémenter certaines fonctionnalités de base de données en code managé.Depending on the scenario, these features can provide a compelling reason to implement certain database functionality in managed code.

Microsoft Visual Basic .NET et Microsoft Visual C# offrent des fonctions orientées objet telles que l'encapsulation, l'héritage et le polymorphisme.Microsoft Visual Basic .NET and Microsoft Visual C# offer object-oriented capabilities such as encapsulation, inheritance, and polymorphism. Le code connexe peut désormais être aisément organisé en classes et en espaces de noms.Related code can now be easily organized into classes and namespaces. Lorsque vous travaillez avec un code serveur volumineux, cela vous permet de l'organiser et de le gérer plus facilement.When you are working with large amounts of server code, this allows you to more easily organize and maintain your code.

Le code managé est mieux adapté que Transact-SQLTransact-SQL pour les calculs et les logiques d'exécution élaborées, et des fonctionnalités étendues prennent en charge nombre de tâches complexes, comme la manipulation des chaînes et des expressions régulières.Managed code is better suited than Transact-SQLTransact-SQL for calculations and complicated execution logic, and features extensive support for many complex tasks, including string handling and regular expressions. Avec les fonctionnalités proposées dans la bibliothèque .NET Framework, vous avez accès aux milliers de classes et routines prégénérées.With the functionality found in the .NET Framework Library, you have access to thousands of pre-built classes and routines. Il est possible d'accéder simplement à celles-ci à partir d'une procédure stockée, d'un déclencheur ou d'une fonction définie par l'utilisateur.These can be easily accessed from any stored procedure, trigger or user defined function. La bibliothèque des classes de base (BCL, Base Class Library) inclut les classes qui fournissent les fonctionnalités de manipulation de chaînes, d'opérations mathématiques avancées, d'accès aux fichiers, de chiffrement, etc.The Base Class Library (BCL) includes classes that provide functionality for string manipulation, advanced math operations, file access, cryptography, and more.

Notes

Alors que la plupart de ces classes sont disponibles pour être utilisées au sein du code CLR de SQL Server, celles qui ne sont pas adaptées à une utilisation côté serveur (par exemple, les classes de fenêtrage) ne sont pas disponibles.While many of these classes are available for use from within CLR code in SQL Server, those that are not appropriate for server-side use (for example, windowing classes), are not available. Pour plus d’informations, consultez prise en charge des bibliothèques .NET Framework.For more information, see Supported .NET Framework Libraries.

L'un des avantages du code managé est la cohérence des types, ou l'assurance que le code n'accède aux types que de façon bien définie et autorisée.One of the benefits of managed code is type safety, or the assurance that code accesses types only in well-defined, permissible ways. Avant que le code managé ne soit exécuté, le CLR vérifie que le code ne présente pas de risque.Before managed code is executed, the CLR verifies that the code is safe. Par exemple, il est procédé à un contrôle du code pour s'assurer qu'aucune mémoire ne soit lue qui n'ait été préalablement écrite.For example, the code is checked to ensure that no memory is read that has not previously been written. Le CLR peut également aider à vérifier que le code ne manipule pas une mémoire non managée.The CLR can also help ensure that code does not manipulate unmanaged memory.

L'intégration du CLR offre la possibilité de meilleures performances.CLR integration offers the potential for improved performance. Pour plus d’informations, consultez performances d’intégration du CLR.For information, see Performance of CLR Integration.

Avertissement

CLR utilise la sécurité d’accès du code (CAS) dans le .NET Framework, qui n’est plus pris en charge comme limite de sécurité.CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. Un assembly CLR créé avec PERMISSION_SET = SAFE peut être en mesure d’accéder à des ressources système externes, d’appeler du code non managé et d’acquérir des privilèges sysadmin.A CLR assembly created with PERMISSION_SET = SAFE may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. À compter de SQL Server 2017 (14.x)SQL Server 2017 (14.x), une option de sp_configure appelée clr strict security est introduite pour renforcer la sécurité des assemblys CLR.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), an sp_configure option called clr strict security is introduced to enhance the security of CLR assemblies. clr strict security est activée par défaut et traite les assemblys SAFE et EXTERNAL_ACCESS comme s’ils étaient marqués UNSAFE.clr strict security is enabled by default, and treats SAFE and EXTERNAL_ACCESS assemblies as if they were marked UNSAFE. L’option clr strict security peut être désactivée pour assurer une compatibilité descendante, mais ceci n’est pas recommandé.The clr strict security option can be disabled for backward compatibility, but this is not recommended. Microsoft recommande que tous les assemblys soient signés par un certificat ou une clé asymétrique avec une connexion correspondante à laquelle a été accordée l’autorisation UNSAFE ASSEMBLY dans la base de données master.Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted UNSAFE ASSEMBLY permission in the master database. Pour plus d’informations, consultez CLR strict security.For more information, see CLR strict security.

Choix entre Transact-SQL et le code managéChoosing Between Transact-SQL and Managed Code

Lors de l'écriture des procédures stockées, des déclencheurs et des fonctions définies par l'utilisateur, vous devez choisir entre l'utilisation du langage Transact-SQLTransact-SQL traditionnel et celle d'un langage .NET Framework, tel que Visual Basic .NET ou Visual C#.When writing stored procedures, triggers, and user-defined functions, one decision you must make is whether to use traditional Transact-SQLTransact-SQL, or a .NET Framework language such as Visual Basic .NET or Visual C#. Utilisez Transact-SQLTransact-SQL lorsque le code effectue principalement un accès aux données avec une logique procédurale nulle ou minime.Use Transact-SQLTransact-SQL when the code will mostly perform data access with little or no procedural logic. Utilisez le code managé pour les fonctions gourmandes en ressources processeur et les procédures qui affichent une logique complexe, ou lorsque vous souhaitez utiliser la bibliothèque de classes de base du .NET Framework.Use managed code for CPU-intensive functions and procedures that feature complex logic, or when you want to make use of the BCL of the .NET Framework.

Choix entre exécution dans le serveur et exécution dans le clientChoosing Between Execution in the Server and Execution in the Client

Autre facteur de votre décision relative au choix de Transact-SQLTransact-SQL ou du code managé, l'emplacement où vous souhaitez que votre code réside, à savoir sur le serveur ou sur l'ordinateur client.Another factor in your decision about whether to use Transact-SQLTransact-SQL or managed code is where you would like your code to reside, the server computer or the client computer. Transact-SQLTransact-SQL et le code managé peuvent tous deux être exécutés sur le serveur.Both Transact-SQLTransact-SQL and managed code can be run on the server. Le code et les données se retrouvent ensemble, et vous permettent de tirer parti de la puissance de traitement du serveur.This places code and data close together, and allows you to take advantage of the processing power of the server. En revanche, vous pouvez souhaiter éviter de placer les tâches intensives du processeur sur votre serveur de base de données.On the other hand, you may wish to avoid placing processor intensive tasks on your database server. Aujourd'hui, la plupart des ordinateurs clients sont très puissants et il se peut que vous souhaitiez tirer parti de cette puissance de traitement en plaçant autant de code que possible sur le client.Most client computers today are very powerful, and you may wish to take advantage of this processing power by placing as much code as possible on the client. Le code managé peut s'exécuter sur un ordinateur client, contrairement à Transact-SQLTransact-SQL.Managed code can run on a client computer, while Transact-SQLTransact-SQL cannot.

Choix entre procédures stockées étendues et code managéChoosing Between Extended Stored Procedures and Managed Code

Les procédures stockées étendues peuvent être créées pour remplir une fonctionnalité inaccessible via les procédures stockées Transact-SQLTransact-SQL.Extended stored procedures can be built to perform functionality not possible with Transact-SQLTransact-SQL stored procedures. Toutefois, les procédures stockées étendues peuvent compromettre l'intégrité du processus SQL ServerSQL Server, contrairement au code managé qui est soumis à une vérification pour être certain qu'il ne présente aucun risque.Extended stored procedures can, however, compromise the integrity of the SQL ServerSQL Server process, while managed code that is verified to be type-safe cannot. En outre, la gestion de la mémoire, la planification des threads et des fibres, et les services de synchronisation sont plus profondément intégrés entre le code managé du CLR et SQL ServerSQL Server.Further, memory management, scheduling of threads and fibers, and synchronization services are more deeply integrated between the managed code of the CLR and SQL ServerSQL Server. Avec l'intégration du CLR, vous avez une solution plus sécurisée que les procédures stockées étendues pour écrire les procédures stockées qui vous sont nécessaires pour exécuter des tâches qui ne peuvent l'être dans Transact-SQLTransact-SQL.With CLR integration, you have a more secure way than extended stored procedures to write the stored procedures you need to perform tasks not possible in Transact-SQLTransact-SQL. Pour plus d’informations sur l’intégration du CLR et les procédures stockées étendues, consultez performances d’intégration du CLR.For more information about CLR integration and extended stored procedures, see Performance of CLR Integration.

Voir aussiSee Also

Installation du .NET Framework Installing the .NET Framework
Architecture d’intégration du CLR Architecture of CLR Integration
Accès aux données à partir des objets de base de données CLR Data Access from CLR Database Objects
Prise en main de l’intégration du CLRGetting Started with CLR Integration