Utilisation d'assemblys vérifiables avec SQL Server

Mise à jour : novembre 2007

Les procédures stockées étendues, empaquetées comme bibliothèques de liens dynamiques (DLL), permettent d'étendre les fonctionnalités de SQL Server à travers des fonctions développées à l'aide de Visual C++. Les procédures stockées étendues sont implémentées en tant que fonctions à l'intérieur des DLL. En plus des fonctions, les procédures stockées étendues peuvent définir également des types définis par l'utilisateur et des fonctions d'agrégation, telles que SUM ou AVG.

Lorsqu'un client exécute une procédure stockée étendue, SQL Server recherche la DLL associée à la procédure stockée étendue et charge la DLL. SQL Server appelle la procédure stockée étendue demandée et l'exécute sous un contexte de sécurité spécifié. La procédure stockée étendue passe ensuite des jeux de résultats et retourne les paramètres au serveur.

SQL Server 2005 fournit des extensions à Transact-SQL (T-SQL) pour vous permettre d'installer des assemblys vérifiables dans SQL Server. Le jeu d'autorisations SQL Server spécifie le contexte de sécurité, avec les niveaux de sécurité suivants :

  • Mode non restreint : exécutez le code à votre propre risque ; le code ne doit pas être de type sécurisé vérifié.

  • Mode sans échec : exécutez le code de type sécurisé vérifié ; compilé avec /clr:safe.

Le mode sans échec nécessite que les assemblys exécutés soient de type sécurisé vérifié.

Pour créer et charger un assembly vérifiable dans SQL Server, utilisez les commandes Transact-SQL CREATE ASSEMBLY et DÉPLACEMENT ASSEMBLY comme suit :

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH 
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

La commande PERMISSION_SET spécifie le contexte de sécurité et peut avoir les valeurs UNRESTRICTED, SAFE ou EXTENDED.

De plus, vous pouvez utiliser la commande CREATE FUNCTION pour lier aux noms de méthodes dans une classe :

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

Pour plus d'informations, consultez Transact-SQL Reference (Transact-SQL).

Exemple

Le script SQL suivant (par exemple, "MyScript.sql" nommé) charge un assembly dans SQL Server et rend une méthode d'une classe disponible :

-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from 
'c:\stockNoEA.dll'
with permission_set safe

-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go

-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go

Les scripts SQL peuvent être exécutés interactivement dans l'Analyseur de requêtes SQL ou sur la ligne de commande avec l'utilitaire sqlcmd.exe. La ligne de commande suivante se connecte à MyServer, utilise la base de données par défaut, utilise une connexion approuvée, entre MyScript.sql et renvoie MyResult.txt.

sqlcmd –S MyServer -E –i myScript.sql –o myResult.txt

Voir aussi

Référence

Comment : effectuer une migration vers /clr:safe

Classes, Structures, and Unions

Autres ressources

Transact-SQL Reference (Transact-SQL)

Extended Stored Procedures

Programming Extended Stored Procedures

sqlcmd Utility