Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les procédures stockées étendues, empaquetées sous forme de bibliothèques de liens dynamiques (DLL), permettent d’étendre les fonctionnalités SQL Server via des fonctions développées avec Visual C++. Les procédures stockées étendues sont implémentées en tant que fonctions dans les DLL. Outre les fonctions, les procédures stockées étendues peuvent également définir 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 transmet ensuite les jeux de résultats et retourne des paramètres au serveur.
SQL Server 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 illimité : exécutez du code à votre propre risque ; le code n’a pas besoin d’être de type sécurisé vérifiable.
Mode sans échec : exécuter de type sécurisé vérifiable ; compilé avec /clr:safe.
Importante
Visual Studio 2015 déprécié et Visual Studio 2017 ne prend pas en charge la création /clr:pure et /clr:safe de projets vérifiables. Si vous avez besoin d’un code vérifiable, nous vous recommandons de traduire votre code en C#.
Pour créer et charger un assembly vérifiable dans SQL Server, utilisez les commandes Transact-SQL CREATE ASSEMBLY et DROP 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.
En outre, vous pouvez utiliser la commande CREATE FUNCTION pour établir une liaison aux noms de méthode dans une classe :
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Exemple
Le script SQL suivant (par exemple, nommé « MyScript.sql ») 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 de manière interactive dans SQL Query Analyzer 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, des entrées MyScript.sql et des sorties MyResult.txt.
sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt