CREATE EXTERNAL LANGUAGE (Transact-SQL)

S’applique à : SQL Server 2019 (15.x)

Inscrit les extensions de langage externe dans la base de données à partir du flux d’octets ou du chemin de fichier spécifié. Cette instruction sert de mécanisme générique permettant à l’administrateur de base de données d’inscrire de nouvelles extensions de langage externe sur toute plateforme de système d’exploitation prise en charge par SQL Server. Pour plus d’informations, consultez Extensions de langage.

Notes

R et Python étant des noms réservés, aucun langage externe ne peut être créé avec ces derniers. Pour plus d’informations sur l’utilisation de R et de Python, consultez SQL Server Machine Learning Services.

Syntaxe

CREATE EXTERNAL LANGUAGE language_name  
[ AUTHORIZATION owner_name ]  
FROM <file_spec> [ ,...2 ]  
[ ; ]  

<file_spec> ::=  
{
    ( CONTENT = { <external_lang_specifier> | <content_bits> },
    FILE_NAME = <external_lang_file_name>
    [ , PLATFORM = <platform> ]
    [ , PARAMETERS = <external_lang_parameters> ]
    [ , ENVIRONMENT_VARIABLES = <external_lang_env_variables> ] )
}

<external_lang_specifier> :: =  
{
    '[file_path\]os_file_name'  
}

<content_bits> :: =  
{
    varbinary_literal
    | varbinary_expression
}

<external_lang_file_name> :: =  
'extension_file_name'


<platform> :: =
{
    WINDOWS
  | LINUX
}

<external_lang_parameters> :: =  
'extension_specific_parameters'

Arguments

language_name

Les langages sont des objets dont l’étendue est limitée à la base de données. Les noms de langage doivent être uniques dans la base de données.

owner_name

Spécifie le nom de l’utilisateur ou du rôle propriétaire du langage externe. En l'absence de spécification, la propriété revient à l'utilisateur actuel. Suivant les autorisations, il peut s’avérer nécessaire d’accorder à d’autres utilisateurs une autorisation explicite pour exécuter des scripts à l’aide d’un langage spécifique.

file_spec

Spécifie le contenu de l’extension de langage. Une seule spécification de fichier est autorisée pour un langage spécifique par plateforme.

external_lang_specifier

Chemin complet du fichier .zip ou tar.gz contenant le code des extensions. Ce contenu peut être le chemin d’un fichier .zip (sur Windows) ou d’un fichier tar.gz (sur Linux).

content_bits

Spécifie le contenu du langage en tant que littéral hexadécimal, similaire aux assemblys.

Cette option est utile si vous devez créer un langage ou modifier un langage existant (et que vous disposez des autorisations nécessaires), mais que le système de fichiers sur le serveur est restreint et vous ne pouvez pas copier les fichiers de bibliothèque vers un emplacement accessible au serveur.

external_lang_file_name

Nom du fichier d’extension .dll ou .so. Cet argument est nécessaire pour identifier le fichier approprié, au cas où il existerait plusieurs fichiers .dll ou .so dans le fichier .zip ou tar.gz défini par <external_lang_specifier>.

external_lang_parameters

Cet argument permet de donner un ensemble de paramètres au runtime de langage externe. Les valeurs de paramètre sont fournies au runtime externe une fois que le processus externe a démarré. Toutefois, les variables d’environnement sont accessibles à l’extension de langage avant le démarrage du processus externe.

external_lang_env_variables

Cet argument permet de donner un ensemble de variables d’environnement au runtime de langage externe avant le démarrage du processus externe. Un exemple de variable d’environnement est le répertoire de base du runtime lui-même. Par exemple : JRE_HOME.

platform

Ce paramètre est nécessaire pour les scénarios de systèmes d’exploitation hybrides. Dans une architecture hybride, le langage doit être inscrit une fois par plateforme. Si aucune plateforme n’est spécifiée, le système d’exploitation actuel est pris en considération.

Autorisations

Nécessite l’autorisation CREATE EXTERNAL LANGUAGE. Par défaut, les utilisateurs qui ont dbo, membre du rôle db_owner, disposent des autorisations nécessaires pour créer un langage externe. En ce qui concerne les autres utilisateurs, vous devez leur en donner l’autorisation explicitement à l’aide d’une instruction GRANT, en spécifiant le privilège CREATE EXTERNAL LANGUAGE.

La modification d’une bibliothèque nécessite l’autorisation distincte ALTER ANY EXTERNAL LANGUAGE.

Autorisation EXECUTE EXTERNAL SCRIPT

Vous pouvez utiliser des autorisations EXECUTE EXTERNAL SCRIPT afin qu’une exécution de script externe puisse être accordée sur des langages spécifiques. C’est différent de l’autorisation de base de données EXECUTE ANY EXTERNAL SCRIPT qui ne permet pas d’accorder d’autorisation d’exécution sur un langage spécifique.

Cela signifie que les utilisateurs non-dbo doivent se voir accorder une autorisation pour exécuter un langage spécifique :

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::language_name 
TO database_principal_name;

Autorisations de référence sur les bibliothèques externes

À l’image des assemblys, des autorisations de référence sont nécessaires pour les langages externes afin qu’il existe un lien entre les bibliothèques externes et ces derniers. Par exemple, si un langage externe est sur le point d’être supprimé, l’utilisateur doit d’abord s’assurer que toutes les bibliothèques externes faisant référence à ce langage sont supprimées. Vous pouvez considérer le langage externe comme un objet de niveau plus élevé que les bibliothèques externes dans une hiérarchie.

Exemples

R. Créer un langage externe dans une base de données

L’exemple suivant ajoute un langage externe appelé Java à une base de données sur SQL Server sur Windows.

CREATE EXTERNAL LANGUAGE Java 
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll');
GO

B. Créer un langage externe pour Windows et Linux

Vous pouvez spécifier jusqu’à deux <file_spec>, un pour Windows et l’autre pour Linux.

CREATE EXTERNAL LANGUAGE Java
FROM
(CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll', PLATFORM = WINDOWS),
(CONTENT = N'<path-to-tar.gz>', FILE_NAME = 'javaextension.so', PLATFORM = LINUX);
GO

C. Accorder des autorisations pour exécuter un script externe

L’exemple suivant permet au principal mylogin d’exécuter des scripts à l’aide du langage externe Java.

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::Java 
TO mylogin;

Voir aussi

ALTER EXTERNAL LANGUAGE (Transact-SQL)
DROP EXTERNAL LANGUAGE (Transact-SQL)
sys.external_languages
sys.external_language_files