CREATE EXTERNAL LANGUAGE (Transact-SQL)

Van toepassing op: SQL Server 2019 (15.x) en latere versies

Registreert externe taalextensies in de database vanaf het opgegeven bestandspad of bytestroom. Deze verklaring is een generiek mechanisme voor de databasebeheerder om nieuwe externe taalextensies te registreren op elk OS-platform dat SQL Server ondersteunt. Voor meer informatie, zie Language Extensions.

Opmerking

R en Python zijn gereserveerde namen. Je kunt geen externe taal maken met die specifieke namen. Voor meer informatie over het gebruik van R en Python, zie SQL Server Machine Learning Services.

Syntax

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

Talen zijn database-scoped objecten. Taalnamen moeten uniek zijn binnen de database.

owner_name

Specificeert de naam van de gebruiker of rol die eigenaar is van de externe taal. Als je geen waarde specificeert, wordt de huidige gebruiker de eigenaar. Afhankelijk van de rechten kunnen andere gebruikers expliciete toestemming nodig hebben om scripts uit te voeren in een specifieke taal.

file_spec

Specificeert de inhoud van de taalextensie. Er is er maar één <file_spec> toegestaan voor een specifieke taal, per platform.

external_lang_specifier

Het volledige bestandspad naar het .zip of tar.gz bestand dat de code van de extensie bevat. Deze inhoud kan een pad zijn naar een .zip-bestand (op Windows) of een tar.gz-bestand (op Linux).

content_bits

Specificeert de inhoud van de taal als een hex-literaal, vergelijkbaar met assemblies.

Gebruik deze optie wanneer het serverbestandssysteem beperkt is en je de bibliotheekbestanden niet kunt kopiëren naar een locatie waar de server toegang toe heeft. Je moet de vereiste rechten hebben om de taal te maken of te wijzigen.

external_lang_file_name

Naam van de extensie .dll of .so bestand. De naam identificeert het juiste bestand wanneer er meerdere .dll- of .so-bestanden in de <external_lang_specifier> .zip of tar.gz bestaan.

external_lang_parameters

Specificeert een set parameters die aan de externe programmeerruntime moeten worden doorgegeven. De externe runtime ontvangt parameterwaarden nadat het externe proces is gestart. Omgevingsvariabelen daarentegen worden toegankelijk voor de taaluitbreiding voordat het externe proces begint.

external_lang_env_variables

Specificeert een set omgevingsvariabelen die beschikbaar moeten worden gesteld aan de externe taal runtime voordat het externe proces start. Stel bijvoorbeeld de thuismap van de runtime zelf in, zoals JRE_HOME.

perron

Deze parameter is nodig voor hybride OS-scenario's. In een hybride architectuur moet je de taal eenmaal per platform registreren. Als je geen platform specificeert, gaat SQL Server ervan uit dat het huidige besturingssysteem is.

Permissions

Hiervoor is de machtiging CREATE EXTERNAL LANGUAGE vereist. Standaard heeft elk lid van de db_owner vaste databaserol rechten om een externe taal te maken. Voor alle andere gebruikers moet je expliciet toestemming geven door een GRANT verklaring te gebruiken, waarbij je het privilege specificeert CREATE EXTERNAL LANGUAGE .

Om een bibliotheek te wijzigen, heb je de aparte toestemming nodig, ALTER ANY EXTERNAL LANGUAGE.

EXECUTE EXTERNAL SCRIPT toestemming

Gebruik EXECUTE EXTERNAL SCRIPT permissies om externe scriptuitvoering op specifieke talen toe te staan. EXECUTE EXTERNAL SCRIPT verschilt van de EXECUTE ANY EXTERNAL SCRIPT databaserecht, die het verlenen van uitvoeringsrechten niet toestaat op een specifieke taal.

Geef niet-DBO-gebruikers toestemming om een specifieke taal uit te voeren:

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

Referentierechten naar externe bibliotheken

Net als bij assemblies vereisen externe talen referentierechten zodat er een verbinding is tussen externe bibliotheken en externe talen. Voordat je bijvoorbeeld een externe taal uitschakelt, moet je alle externe bibliotheken die ernaar verwijzen verwijderen. Bekijk de externe taal als een hoger niveau object dan externe bibliotheken in de hiërarchie.

Voorbeelden

Eén. Maak een externe taal aan in een database

In het volgende voorbeeld wordt een externe taal met de naam Java toegevoegd aan een database op SQL Server in Windows.

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

B. Maak een externe taal aan voor zowel Windows als Linux

U kunt maximaal twee <file_spec>opgeven, één voor Windows en één voor 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. Verleen permissies om extern script uit te voeren

Het volgende voorbeeld geeft de mylogin principal toegang om scripts uit te voeren met de externe Java-taal.

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