Création d'un assemblyCreating an Assembly

Cette rubrique s’applique à : OuiSQL Serveraucunbase de données SQL AzureaucunAzure SQL Data Warehouse aucun Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse Les objets de base de données managés, tels que des procédures stockées ou déclencheurs, sont compilés et déployés dans des unités appelées un assembly. Managed database objects, such as stored procedures or triggers, are compiled and then deployed in units called an assembly. Les assemblys DLL managés doivent être enregistrés dans MicrosoftMicrosoft SQL ServerSQL Server .Managed DLL assemblies must be registered in MicrosoftMicrosoft SQL ServerSQL Server before the functionality the assembly provides can be used. Pour enregistrer un assembly dans une base de données SQL ServerSQL Server , utilisez l'instruction CREATE ASSEMBLY.To register an assembly in a SQL ServerSQL Server database, use the CREATE ASSEMBLY statement. Cette rubrique explique comment enregistrer un assembly dans une base de données à l'aide de l'instruction CREATE ASSEMBLY, puis comment spécifier les paramètres de sécurité de l'assembly.This topic discusses how to register an assembly in a database using the CREATE ASSEMBLY statement, and how to specify the security settings for the assembly.

Instruction CREATE ASSEMBLYThe CREATE ASSEMBLY Statement

L'instruction CREATE ASSEMBLY permet de créer un assembly dans une base de données.The CREATE ASSEMBLY statement is used to create an assembly in a database. Par exemple :Here is an example:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll';  

La clause FROM spécifie le nom du chemin d'accès de l'assembly à créer.The FROM clause specifies the pathname of the assembly to create. Ce chemin d'accès peut être soit un chemin UNC (Universal Naming Convention), soit le chemin d'accès d'un fichier physique stocké localement sur l'ordinateur.This path can either be a Universal Naming Convention (UNC) path or a physical file path that is local to the machine.

SQL ServerSQL Server n'autorise pas l'inscription de différentes versions d'un assembly avec le même nom, la même culture et la même clé publique. does not allow registering different versions of an assembly with the same name, culture and public key.

Il est possible de créer des assemblys qui référencent d'autres assemblys.It is possible to create assemblies that reference other assemblies. Lorsque vous créez un assembly dans SQL ServerSQL Server, SQL ServerSQL Server crée également les assemblys référencés par l'assembly au niveau de la racine si les assemblys référencés ne sont pas déjà créés dans la base de données.When an assembly is created in SQL ServerSQL Server, SQL ServerSQL Server also creates the assemblies referenced by the root-level assembly, if the referenced assemblies are not already created into the database.

Les utilisateurs ou les rôles d'utilisateurs de base de données se voient accorder des autorisations pour créer, et de ce fait acquérir, des assemblys dans une base de données.Database users or user roles are given permissions to create, and thereby own, assemblies in a database. Pour être en mesure de créer des assemblys, l'utilisateur ou le rôle d'utilisateur de base de données doit bénéficier de l'autorisation CREATE ASSEMBLY.In order to create assemblies, the database user or role should have the CREATE ASSEMBLY permission.

Un assembly peut parvenir à référencer d'autres assemblys uniquement si :An assembly can only succeed in referencing other assemblies if:

  • l'assembly appelé ou référencé est possédé par le même utilisateur ou rôle ;The assembly that is called or referenced is owned by the same user or role.

  • l'assembly appelé ou référencé a été créé dans la même base de données.The assembly that is called or referenced was created in the same database.

Définition de la sécurité lors de la création d'assemblysSpecifying Security When Creating Assemblies

Lorsque vous créez un assembly dans une base de données SQL ServerSQL Server , vous pouvez spécifier un des trois niveaux différents de sécurité dans lesquels votre code peut être exécuté : SAFE, EXTERNAL_ACCESSou UNSAFE.When creating an assembly into a SQL ServerSQL Server database, you can specify one of three different levels of security in which your code can run: SAFE, EXTERNAL_ACCESS, or UNSAFE. Au moment de l'exécution de l'instruction CREATE ASSEMBLY , l'assembly de code est soumis à certains contrôles qui peuvent entraîner l'échec de l'enregistrement de l'assembly sur le serveur.When the CREATE ASSEMBLY statement is run, certain checks are performed on the code assembly which may cause the assembly to fail to register on the server. Pour plus d'informations, consultez l'exemple d'emprunt d'identité sur CodePlex.For more information, see the Impersonation sample on CodePlex.

SAFE est le jeu d'autorisations par défaut et fonctionne pour la majorité des scénarios.SAFE is the default permission set and works for the majority of scenarios. Pour spécifier un niveau de sécurité donné, vous devez modifier la syntaxe de l'instruction CREATE ASSEMBLY comme suit :To specify a given security level, you modify the syntax of the CREATE ASSEMBLY statement as follows:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll'  
WITH PERMISSION_SET = SAFE;  

Il est également possible de créer un assembly à l'aide du jeu d'autorisations SAFE par simple omission de la troisième ligne de code ci-dessus :It is also possible to create an assembly with the SAFE permission set by simply omitting the third line of code above:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll';  

Lorsque le code dans un assembly s'exécute sous le jeu d'autorisations SAFE , tout calcul ou accès aux données sur le serveur ne peut avoir lieu que par l'entremise du fournisseur managé in-process.When code in an assembly runs under the SAFE permission set, it can only do computation and data access within the server through the in-process managed provider.

Création d'assemblys EXTERNAL_ACCESS et UNSAFECreating EXTERNAL_ACCESS and UNSAFE Assemblies

EXTERNAL_ACCESS propose des scénarios dans lesquels le code doit accéder à des ressources externes au serveur, tel que des fichiers, le réseau, le Registre et des variables d'environnement.EXTERNAL_ACCESS addresses scenarios in which the code needs to access resources outside the server, such as files, network, registry, and environment variables. Lorsque le serveur accède à une ressource externe, il emprunte l'identité du contexte de sécurité de l'utilisateur appelant le code managé.Whenever the server accesses an external resource, it impersonates the security context of the user calling the managed code.

UNSAFE convient dans des situations où la sécurité d'un assembly ne peut être vérifiée ou exige un accès supplémentaire à des ressources restreintes, telles que l'API Win32 MicrosoftMicrosoft .UNSAFE code permission is for those situations in which an assembly is not verifiably safe or requires additional access to restricted resources, such as the MicrosoftMicrosoft Win32 API.

Pour la création d'un assembly EXTERNAL_ACCESS ou UNSAFE dans SQL ServerSQL Server, l'une des deux conditions suivantes doit être remplie :To create an EXTERNAL_ACCESS or UNSAFE assembly in SQL ServerSQL Server, one of the following two conditions must be met:

  1. L'assembly est signé avec un nom fort ou porte une signature Authenticode avec certificat.The assembly is strong name signed or Authenticode signed with a certificate. Ce nom fort (ou certificat) est créé dans SQL ServerSQL Server en tant que clé asymétrique (ou certificat) et dispose d'une connexion correspondante avec l'autorisation EXTERNAL ACCESS ASSEMBLY (pour les assemblys à accès externe) ou l'autorisation UNSAFE ASSEMBLY (pour les assemblys non sécurisés).This strong name (or certificate) is created inside SQL ServerSQL Server as an asymmetric key (or certificate), and has a corresponding login with EXTERNAL ACCESS ASSEMBLY permission (for external access assemblies) or UNSAFE ASSEMBLY permission (for unsafe assemblies).

  2. Le propriétaire de la base de données (DBO) bénéficie de l'autorisation EXTERNAL ACCESS ASSEMBLY (pour les assemblys EXTERNAL ACCESS ) ou UNSAFE ASSEMBLY (pour les assemblys UNSAFE ) et la TRUSTWORTHY Database Property de la base de données est définie sur ON.The database owner (DBO) has EXTERNAL ACCESS ASSEMBLY (for EXTERNAL ACCESS assemblies) or UNSAFE ASSEMBLY (for UNSAFE assemblies) permission, and the database has the TRUSTWORTHY Database Property set to ON.

    Les deux conditions mentionnées ci-dessus sont également vérifiées au moment du chargement de l'assembly (exécution incluse).The two conditions listed above are also checked at assembly load time (which includes execution). Une des conditions doit au minimum être satisfaite pour le chargement de l'assembly.At least one of the conditions must be met in order to load the assembly.

    Nous vous recommandons de ne pas définir la TRUSTWORTHY Database Property sur ON dans une base de données uniquement afin d'exécuter le code du CLR (Common Language Runtime) dans le processus serveur.We recommend that the TRUSTWORTHY Database Property on a database not be set to ON only to run common language runtime (CLR) code in the server process. Il est préférable, à la place, de créer une clé asymétrique à partir du fichier d'assembly dans la base de données master.Instead, we recommend that an asymmetric key be created from the assembly file in the master database. Une connexion mappée à cette clé asymétrique doit ensuite être créée. Cette connexion doit disposer de l'autorisation EXTERNAL ACCESS ASSEMBLY ou UNSAFE ASSEMBLY .A login mapped to this asymmetric key must then be created, and the login must be granted EXTERNAL ACCESS ASSEMBLY or UNSAFE ASSEMBLY permission.

    Les instructions Transact-SQLTransact-SQL suivantes permettent de réaliser les étapes nécessaires pour créer une clé asymétrique, mapper une connexion à cette clé, puis accorder l'autorisation EXTERNAL_ACCESS à la connexion.The following Transact-SQLTransact-SQL statements perform the steps that are required to create an asymmetric key, map a login to this key, and then grant EXTERNAL_ACCESS permission to the login. Vous devez exécuter les instructions Transact-SQLTransact-SQL suivantes avant d'exécuter l'instruction CREATE ASSEMBLY.You must run the following Transact-SQLTransact-SQL statements before running the CREATE ASSEMBLY statement.

USE master;   
GO    

CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll'     
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey     
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;   
GO   

Note

Vous devez créer une connexion à associer à la clé asymétrique.You must create a new login to associate with the asymmetric key. Cette connexion permet uniquement d'accorder des autorisations ; elle ne doit pas être associée à un utilisateur ni utilisée dans l'application.This login is only used to grant permissions; it does not have to be associated with a user, or used within the application.

Pour créer un assembly EXTERNAL ACCESS , la personne chargée de le créer doit posséder l'autorisation EXTERNAL ACCESS .To create an EXTERNAL ACCESS assembly, the creator needs to have EXTERNAL ACCESS permission. Elle est spécifiée au moment de créer l'assembly :This is specified when creating the assembly:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll'  
WITH PERMISSION_SET = EXTERNAL_ACCESS;  

Les instructions Transact-SQLTransact-SQL suivantes permettent de réaliser les étapes nécessaires pour créer une clé asymétrique, mapper une connexion à cette clé, puis accorder l'autorisation UNSAFE à la connexion.The following Transact-SQLTransact-SQL statements perform the steps that are required to create an asymmetric key, map a login to this key, and then grant UNSAFE permission to the login. Vous devez exécuter les instructions Transact-SQLTransact-SQL suivantes avant d'exécuter l'instruction CREATE ASSEMBLY.You must run the following Transact-SQLTransact-SQL statements before running the CREATE ASSEMBLY statement.

USE master;   
GO    

CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';     
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey ;    
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin ;  
GO  

Pour préciser qu'un assembly est chargé avec l'autorisation UNSAFE , vous devez spécifier l'autorisation UNSAFE définie lors du chargement de l'assembly sur le serveur :To specify that an assembly loads with UNSAFE permission, you specify the UNSAFE permission set when loading the assembly into the server:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll'  
WITH PERMISSION_SET = UNSAFE;  

Pour obtenir des informations détaillées sur les autorisations pour chacun de ces paramètres, consultez CLR Integration Security.For more details about the permissions for each of the settings, see CLR Integration Security.

Voir aussiSee Also

La gestion des assemblys d’intégration du CLR Managing CLR Integration Assemblies
Modification d’un Assembly Altering an Assembly
Suppression d’un Assembly Dropping an Assembly
Sécurité d’accès du Code CLR Integration CLR Integration Code Access Security
Propriété de base de données TRUSTWORTHY TRUSTWORTHY Database Property
Autoriser partiellement approuvé appelantsAllowing Partially Trusted Callers