Créer un assembly
S'applique à :SQL Server
Les objets de base de données managés, tels que les procédures stockées ou les déclencheurs, sont successivement compilés et déployés dans des unités appelées « assemblys ». Les assemblys DLL managés doivent être inscrits dans SQL Server avant que les fonctionnalités de l’assembly puissent être utilisées. Pour inscrire un assembly dans une base de données SQL Server, utilisez l’instruction CREATE ASSEMBLY
. Cet article explique comment inscrire un assembly dans une base de données à l’aide de l’instruction CREATE ASSEMBLY
et comment spécifier les paramètres de sécurité de l’assembly.
Instruction CREATE ASSEMBLY
L’instruction CREATE ASSEMBLY
est utilisée pour créer un assembly dans une base de données. Voici un exemple :
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
La clause FROM
spécifie le chemin d’accès de l’assembly à créer. 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.
SQL Server n’autorise pas l’inscription de différentes versions d’un assembly portant le même nom, la même culture et la clé publique.
Il est possible de créer des assemblys qui référencent d’autres assemblys. Lorsqu’un assembly est créé dans SQL Server, SQL Server crée également les assemblys référencés par l’assembly de niveau racine, si les assemblys référencés ne sont pas déjà créés dans la base de données.
Les utilisateurs de base de données ou les rôles d’utilisateur sont autorisés à créer, et par conséquent, à posséder des assemblys dans une base de données. Pour créer des assemblys, l’utilisateur ou le rôle de base de données doit disposer de l’autorisation CREATE ASSEMBLY
.
Un assembly peut parvenir à référencer d'autres assemblys uniquement si :
- L’assembly appelé ou référencé appartient au même utilisateur ou rôle.
- L’assembly appelé ou référencé a été créé dans la même base de données.
Spécifier la sécurité lors de la création d’assemblys
Lors de la création d’un assembly dans une base de données SQL Server, vous pouvez spécifier l’un des trois niveaux de sécurité différents dans lesquels votre code peut s’exécuter : SAFE
, EXTERNAL_ACCESS
ou UNSAFE
. Lorsque l’instruction CREATE ASSEMBLY
est exécutée, certaines vérifications sont effectuées sur l’assembly de code, ce qui peut entraîner l’échec de l’inscription de l’assembly sur le serveur.
SAFE
est le jeu d’autorisations par défaut et fonctionne pour la plupart des scénarios. Pour spécifier un niveau de sécurité donné, vous modifiez la syntaxe de l’instruction CREATE ASSEMBLY
comme suit :
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
Il est également possible de créer un assembly avec le jeu d’autorisations SAFE
en omettant la troisième ligne précédente.
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Lorsque le code d’un assembly s’exécute sous le jeu d’autorisations SAFE
, il ne peut effectuer que des calculs et un accès aux données au sein du serveur via le fournisseur managé in-process.
Créer des assemblys EXTERNAL_ACCESS et UNSAFE
EXTERNAL_ACCESS
aborde les scénarios dans lesquels le code doit accéder aux ressources en dehors du serveur, telles que les fichiers, le réseau, le registre et les variables d’environnement. Lorsque le serveur accède à une ressource externe, il emprunte l'identité du contexte de sécurité de l'utilisateur appelant le code managé.
UNSAFE
autorisation de code concerne les situations dans lesquelles un assembly n’est pas vérifiable et nécessite un accès supplémentaire aux ressources restreintes, telles que l’API Win32.
Pour créer un assembly EXTERNAL_ACCESS
ou UNSAFE
dans SQL Server, l’une des deux conditions suivantes doit être remplie :
L'assembly est signé avec un nom fort ou porte une signature Authenticode avec certificat. Ce nom fort (ou certificat) est créé à l’intérieur de SQL Server en tant que clé asymétrique (ou certificat) et dispose d’une connexion correspondante avec
EXTERNAL ACCESS ASSEMBLY
autorisation (pour les assemblys d’accès externe) ouUNSAFE ASSEMBLY
autorisation (pour les assemblys non sécurisés).Le propriétaire de la base de données (DBO) a
EXTERNAL ACCESS ASSEMBLY
(pour les assemblysEXTERNAL ACCESS
) ouUNSAFE ASSEMBLY
(pour les assemblysUNSAFE
) et la base de données a la propriété de base de données TRUSTWORTHY définie surON
.
Les deux conditions répertoriées précédemment sont également vérifiées au moment du chargement de l’assembly (qui inclut l’exécution). Une des conditions doit au minimum être satisfaite pour le chargement de l'assembly.
Nous vous recommandons d'propriété de base de données TRUSTWORTHY sur une base de données n’est pas définie sur ON
uniquement pour exécuter du code CLR (Common Language Runtime) dans le processus serveur. Au lieu de cela, nous vous recommandons de créer une clé asymétrique à partir du fichier d’assembly dans la base de données master
. Une connexion mappée à cette clé asymétrique doit ensuite être créée, et la connexion doit être accordée EXTERNAL ACCESS ASSEMBLY
ou UNSAFE ASSEMBLY
autorisation.
Les instructions Transact-SQL suivantes effectuent les étapes requises pour créer une clé asymétrique, mapper une connexion à cette clé, puis accorder EXTERNAL_ACCESS
autorisation à la connexion. Vous devez exécuter les instructions Transact-SQL suivantes avant d’exécuter l’instruction CREATE ASSEMBLY
.
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
Remarque
Vous devez créer une connexion à associer à la clé asymétrique. Cette connexion est utilisée uniquement pour accorder des autorisations. Il n’est pas obligé d’être associé à un utilisateur ou utilisé dans l’application.
Pour créer un assembly EXTERNAL ACCESS
, le créateur doit spécifier EXTERNAL ACCESS
autorisation lors de la création de l’assembly :
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Les instructions Transact-SQL suivantes effectuent les étapes requises pour créer une clé asymétrique, mapper une connexion à cette clé, puis accorder UNSAFE
autorisation à la connexion. Vous devez exécuter les instructions Transact-SQL suivantes avant d’exécuter l’instruction CREATE ASSEMBLY
.
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 spécifier qu’un assembly se charge avec UNSAFE
autorisation, vous spécifiez le jeu d’autorisations UNSAFE
lors du chargement de l’assembly sur le serveur :
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Pour plus d’informations sur les autorisations pour chacun des paramètres, consultez sécurité d’intégration CLR.
Contenu connexe
- Gérer les assemblys d’intégration CLR
- Modifier un d’assembly
- Supprimer un d’assembly
- de sécurité d’accès au code d’intégration CLR
- propriété de base de données TRUSTWORTHY